2024-08-02 13:02:25 +08:00
package padding
import (
"reflect"
"testing"
)
func Test_iso9797M2Padding_Pad ( t * testing . T ) {
iso9797 := NewISO9797M2Padding ( 16 )
tests := [ ] struct {
name string
src [ ] byte
want [ ] byte
} {
{ "16 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } } ,
{ "15 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 0x80 } } ,
{ "14 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 0x80 , 0 } } ,
{ "13 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 0x80 , 0 , 0 } } ,
{ "12 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 0x80 , 0 , 0 , 0 } } ,
{ "11 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 0x80 , 0 , 0 , 0 , 0 } } ,
{ "10 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0x80 , 0 , 0 , 0 , 0 , 0 } } ,
{ "9 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 } } ,
{ "8 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } } ,
{ "7 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } } ,
{ "6 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } } ,
{ "5 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } } ,
{ "4 bytes" , [ ] byte { 0 , 1 , 2 , 3 } , [ ] byte { 0 , 1 , 2 , 3 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } } ,
{ "3 bytes" , [ ] byte { 0 , 1 , 2 } , [ ] byte { 0 , 1 , 2 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } } ,
{ "2 bytes" , [ ] byte { 0 , 1 } , [ ] byte { 0 , 1 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } } ,
{ "1 bytes" , [ ] byte { 0 } , [ ] byte { 0 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } } ,
2025-03-18 11:21:48 +08:00
{ "0 bytes" , [ ] byte { } , [ ] byte { 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } } ,
2024-08-02 13:02:25 +08:00
}
for _ , tt := range tests {
t . Run ( tt . name , func ( t * testing . T ) {
if got := iso9797 . Pad ( tt . src ) ; ! reflect . DeepEqual ( got , tt . want ) {
t . Errorf ( "iso9797M2Padding.Pad() = %v, want %v" , got , tt . want )
}
} )
}
}
func Test_iso9797M2Padding_Unpad ( t * testing . T ) {
iso9797 := NewISO9797M2Padding ( 16 )
tests := [ ] struct {
name string
want [ ] byte
src [ ] byte
wantErr bool
} {
{ "16 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
{ "15 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 0x80 } , false } ,
{ "14 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 0x80 , 0 } , false } ,
{ "13 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 0x80 , 0 , 0 } , false } ,
{ "12 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 0x80 , 0 , 0 , 0 } , false } ,
{ "11 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 0x80 , 0 , 0 , 0 , 0 } , false } ,
{ "10 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0x80 , 0 , 0 , 0 , 0 , 0 } , false } ,
{ "9 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
{ "8 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
{ "7 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
{ "6 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
{ "5 bytes" , [ ] byte { 0 , 1 , 2 , 3 , 4 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
{ "4 bytes" , [ ] byte { 0 , 1 , 2 , 3 } , [ ] byte { 0 , 1 , 2 , 3 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
{ "3 bytes" , [ ] byte { 0 , 1 , 2 } , [ ] byte { 0 , 1 , 2 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
{ "2 bytes" , [ ] byte { 0 , 1 } , [ ] byte { 0 , 1 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
{ "1 bytes" , [ ] byte { 0 } , [ ] byte { 0 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
2025-03-18 11:21:48 +08:00
{ "0 bytes" , [ ] byte { } , [ ] byte { 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
2024-08-02 13:02:25 +08:00
{ "1 bytes with tag" , [ ] byte { 0x80 } , [ ] byte { 0x80 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
{ "3 bytes with tag" , [ ] byte { 0x80 , 0 , 0x80 } , [ ] byte { 0x80 , 0 , 0x80 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
{ "19 bytes with tag" , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 0x80 , 0 , 0x80 } , [ ] byte { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 0x80 , 0 , 0x80 , 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , false } ,
{ "invalid src length" , nil , [ ] byte { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , true } ,
2025-03-18 11:21:48 +08:00
{ "inconsistent padding bytes" , nil , [ ] byte { 0 , 0x80 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } , true } ,
2024-08-02 13:02:25 +08:00
}
for _ , tt := range tests {
t . Run ( tt . name , func ( t * testing . T ) {
got , err := iso9797 . Unpad ( tt . src )
if ( err != nil ) != tt . wantErr {
t . Errorf ( "case %v: iso9797M2Padding.Unpad() error = %v, wantErr %v" , tt . name , err , tt . wantErr )
return
}
if ! reflect . DeepEqual ( got , tt . want ) {
t . Errorf ( "case %v: iso9797M2Padding.Unpad() = %v, want %v" , tt . name , got , tt . want )
}
} )
}
}