Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion crypto/dcc/dcc.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (

"github.com/TheManticoreProject/Manticore/crypto/md4"
"github.com/TheManticoreProject/Manticore/crypto/nt"
"github.com/TheManticoreProject/Manticore/utils/encoding/utf16"
"github.com/TheManticoreProject/Manticore/encoding/utf16"

"encoding/hex"
"strings"
Expand Down
2 changes: 1 addition & 1 deletion crypto/dcc2/dcc2.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

"github.com/TheManticoreProject/Manticore/crypto/md4"
"github.com/TheManticoreProject/Manticore/crypto/nt"
"github.com/TheManticoreProject/Manticore/utils/encoding/utf16"
"github.com/TheManticoreProject/Manticore/encoding/utf16"
"golang.org/x/crypto/pbkdf2"
)

Expand Down
2 changes: 1 addition & 1 deletion crypto/gppp/gppp.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"strings"

"github.com/TheManticoreProject/Manticore/crypto/pkcs7"
"github.com/TheManticoreProject/Manticore/utils/encoding/utf16"
"github.com/TheManticoreProject/Manticore/encoding/utf16"
)

// AES Key as per the Microsoft documentation
Expand Down
2 changes: 1 addition & 1 deletion crypto/nt/nt.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"strings"

"github.com/TheManticoreProject/Manticore/crypto/md4"
"github.com/TheManticoreProject/Manticore/utils/encoding/utf16"
"github.com/TheManticoreProject/Manticore/encoding/utf16"
)

// NTHash computes the NT hash of a password string
Expand Down
2 changes: 1 addition & 1 deletion crypto/ntlmv2/ntlmv2_ctx.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

"github.com/TheManticoreProject/Manticore/crypto/lm"
"github.com/TheManticoreProject/Manticore/crypto/nt"
"github.com/TheManticoreProject/Manticore/utils/encoding/utf16"
"github.com/TheManticoreProject/Manticore/encoding/utf16"
)

// NTLMv2 represents the components needed for NTLMv2 authentication
Expand Down
2 changes: 1 addition & 1 deletion crypto/spnego/authcontext.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package spnego

import (
"github.com/TheManticoreProject/Manticore/crypto/spnego/ntlm/message/challenge"
"github.com/TheManticoreProject/Manticore/utils/encoding/utf16"
"github.com/TheManticoreProject/Manticore/encoding/utf16"
)

// AuthType represents the authentication type
Expand Down
2 changes: 1 addition & 1 deletion crypto/spnego/ntlm/message/authenticate/authenticate.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (
"github.com/TheManticoreProject/Manticore/crypto/spnego/ntlm/message/negotiate/flags"
"github.com/TheManticoreProject/Manticore/crypto/spnego/ntlm/message/types"
"github.com/TheManticoreProject/Manticore/crypto/spnego/ntlm/version"
"github.com/TheManticoreProject/Manticore/utils/encoding/utf16"
"github.com/TheManticoreProject/Manticore/encoding/utf16"
)

// AuthenticateMessage is the third message in NTLM authentication
Expand Down
2 changes: 1 addition & 1 deletion crypto/spnego/ntlm/message/negotiate/negotiate.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"github.com/TheManticoreProject/Manticore/crypto/spnego/ntlm/message/negotiate/flags"
"github.com/TheManticoreProject/Manticore/crypto/spnego/ntlm/message/types"
"github.com/TheManticoreProject/Manticore/crypto/spnego/ntlm/version"
"github.com/TheManticoreProject/Manticore/utils/encoding/utf16"
"github.com/TheManticoreProject/Manticore/encoding/utf16"
)

// NegotiateMessage is the first message in NTLM authentication
Expand Down
29 changes: 29 additions & 0 deletions encoding/ascii/ascii.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package ascii

// asciiCharset contains all 256 ASCII byte values from 0x00 to 0xFF
var asciiCharset = []uint8{
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
}

// GetAsciiCharset returns a copy of the ASCII charset containing all 256 byte values from 0x00 to 0xFF.
// This function returns a copy to prevent accidental mutation of the internal charset.
func GetAsciiCharset() []uint8 {
result := make([]uint8, len(asciiCharset))
copy(result, asciiCharset)
return result
}
12 changes: 12 additions & 0 deletions encoding/ascii/ascii_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ascii

import "testing"

func TestASCIICharset(t *testing.T) {
charset := GetAsciiCharset()
for i := 0; i < 256; i++ {
if charset[i] != uint8(i) {
t.Errorf("AsciiCharset[%d] = %d; expected %d", i, charset[i], uint8(i))
}
}
}
55 changes: 55 additions & 0 deletions encoding/ebcdic/cp037/cp037.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package cp037

// AsciiToEbcdicCp037Map
var AsciiToEbcdicCp037Map = [...]uint8{
0x00, 0x01, 0x02, 0x03, 0x9c, 0x09, 0x86, 0x7f, 0x97, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x9d, 0x85, 0x08, 0x87, 0x18, 0x19, 0x92, 0x8f, 0x1c, 0x1d, 0x1e, 0x1f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x0a, 0x17, 0x1b, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07,
0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a,
0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, 0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c,
0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0xac,
0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, 0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f,
0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, 0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22,
0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1,
0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4,
0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae,
0x5e, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, 0xbd, 0xbe, 0x5b, 0x5d, 0xaf, 0xa8, 0xb4, 0xd7,
0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5,
0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff,
0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f,
}

// EbcdicCp037ToAsciiMap
var EbcdicCp037ToAsciiMap = [...]uint8{
0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,
0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,
0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d,
0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07,
0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b,
0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff,
0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, 0xbd, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xbc,
0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab,
0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77,
0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59,
0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57,
0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf,
}

func EbcdicCp037ToAscii(b []uint8) []uint8 {
for i, v := range b {
b[i] = EbcdicCp037ToAsciiMap[v]
}
return b
}

func AsciiToEbcdicCp037(b []uint8) []uint8 {
for i, v := range b {
b[i] = AsciiToEbcdicCp037Map[v]
}
return b
}
34 changes: 34 additions & 0 deletions encoding/ebcdic/cp037/cp037_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package cp037_test

import (
"testing"

"github.com/TheManticoreProject/Manticore/encoding/ascii"
"github.com/TheManticoreProject/Manticore/encoding/ebcdic/cp037"
)

func TestCp037ToAsciiMap(t *testing.T) {
asciiCharset := ascii.GetAsciiCharset()
result := cp037.EbcdicCp037ToAscii(asciiCharset)
if len(result) != len(cp037.EbcdicCp037ToAsciiMap[:]) {
t.Fatalf("Result length mismatch, got %d expected %d", len(result), len(cp037.EbcdicCp037ToAsciiMap[:]))
}
for i, v := range cp037.EbcdicCp037ToAsciiMap[:] {
if result[i] != v {
t.Errorf("Ebcdiccp037ToAscii failed at index %d: got %v, expected %v", i, result[i], v)
}
}
}

func TestAsciiToCp037Map(t *testing.T) {
asciiCharset := ascii.GetAsciiCharset()
result := cp037.AsciiToEbcdicCp037(asciiCharset)
if len(result) != len(cp037.AsciiToEbcdicCp037Map[:]) {
t.Fatalf("Result length mismatch, got %d expected %d", len(result), len(cp037.AsciiToEbcdicCp037Map[:]))
}
for i, v := range cp037.AsciiToEbcdicCp037Map[:] {
if result[i] != v {
t.Errorf("Ebcdiccp037ToAscii failed at index %d: got %v, expected %v", i, result[i], v)
}
}
}
55 changes: 55 additions & 0 deletions encoding/ebcdic/cp500/cp500.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package cp500

// AsciiToEbcdicCp500Map
var AsciiToEbcdicCp500Map = []uint8{
0x00, 0x01, 0x02, 0x03, 0x9c, 0x09, 0x86, 0x7f, 0x97, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x9d, 0x85, 0x08, 0x87, 0x18, 0x19, 0x92, 0x8f, 0x1c, 0x1d, 0x1e, 0x1f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x0a, 0x17, 0x1b, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07,
0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a,
0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, 0xe7, 0xf1, 0x5b, 0x2e, 0x3c, 0x28, 0x2b, 0x21,
0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, 0xec, 0xdf, 0x5d, 0x24, 0x2a, 0x29, 0x3b, 0x5e,
0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, 0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f,
0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, 0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22,
0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1,
0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4,
0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae,
0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, 0xbd, 0xbe, 0xac, 0x7c, 0xaf, 0xa8, 0xb4, 0xd7,
0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5,
0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff,
0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f,
}

// EbcdicCp500ToAsciiMap
var EbcdicCp500ToAsciiMap = []uint8{
0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,
0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,
0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d,
0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xc0, 0xbb, 0xd0, 0xa1, 0x07,
0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b,
0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff,
0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc,
0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab,
0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77,
0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59,
0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57,
0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf,
}

func EbcdicCp500ToAscii(b []uint8) []uint8 {
for i, v := range b {
b[i] = EbcdicCp500ToAsciiMap[v]
}
return b
}

func AsciiToEbcdicCp500(b []uint8) []uint8 {
for i, v := range b {
b[i] = AsciiToEbcdicCp500Map[v]
}
return b
}
34 changes: 34 additions & 0 deletions encoding/ebcdic/cp500/cp500_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package cp500_test

import (
"testing"

"github.com/TheManticoreProject/Manticore/encoding/ascii"
"github.com/TheManticoreProject/Manticore/encoding/ebcdic/cp500"
)

func TestCp500ToAsciiMap(t *testing.T) {
asciiCharset := ascii.GetAsciiCharset()
result := cp500.EbcdicCp500ToAscii(asciiCharset)
if len(result) != len(cp500.EbcdicCp500ToAsciiMap[:]) {
t.Fatalf("Result length mismatch, got %d expected %d", len(result), len(cp500.EbcdicCp500ToAsciiMap[:]))
}
for i, v := range cp500.EbcdicCp500ToAsciiMap[:] {
if result[i] != v {
t.Errorf("Ebcdiccp500ToAscii failed at index %d: got %v, expected %v", i, result[i], v)
}
}
}

func TestAsciiToCp500Map(t *testing.T) {
asciiCharset := ascii.GetAsciiCharset()
result := cp500.AsciiToEbcdicCp500(asciiCharset)
if len(result) != len(cp500.AsciiToEbcdicCp500Map[:]) {
t.Fatalf("Result length mismatch, got %d expected %d", len(result), len(cp500.AsciiToEbcdicCp500Map[:]))
}
for i, v := range cp500.AsciiToEbcdicCp500Map[:] {
if result[i] != v {
t.Errorf("Ebcdiccp500ToAscii failed at index %d: got %v, expected %v", i, result[i], v)
}
}
}
44 changes: 44 additions & 0 deletions encoding/ebcdic/ebcdic.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package ebcdic

import (
"fmt"

"github.com/TheManticoreProject/Manticore/encoding/ebcdic/cp037"
"github.com/TheManticoreProject/Manticore/encoding/ebcdic/cp500"
)

var AvailableCodepages = []string{
"cp037",
"cp500",
}

var CodepageToEbcdicToAsciiMap = map[string][]uint8{
"cp037": cp037.EbcdicCp037ToAsciiMap[:],
"cp500": cp500.EbcdicCp500ToAsciiMap[:],
}
var CodepageToAsciiToEbcdicMap = map[string][]uint8{
"cp037": cp037.AsciiToEbcdicCp037Map[:],
"cp500": cp500.AsciiToEbcdicCp500Map[:],
}

func EbcdicToAscii(codepage string, b []uint8) ([]uint8, error) {
ebcdicToAsciiMap, ok := CodepageToEbcdicToAsciiMap[codepage]
if !ok {
return nil, fmt.Errorf("codepage %s not found", codepage)
}
for i, v := range b {
b[i] = ebcdicToAsciiMap[v]
}
return b, nil
}

func AsciiToEbcdic(codepage string, b []uint8) ([]uint8, error) {
asciiToEbcdicMap, ok := CodepageToAsciiToEbcdicMap[codepage]
if !ok {
return nil, fmt.Errorf("codepage %s not found", codepage)
}
for i, v := range b {
b[i] = asciiToEbcdicMap[v]
}
return b, nil
}
Loading
Loading