mirror of
https://github.com/emmansun/gmsm.git
synced 2025-04-26 20:26:19 +08:00
MAGIC - add rfc8998 test vectors
This commit is contained in:
parent
05412e2b7e
commit
ce18b7d841
54
sm4_test/ccm_sm4_test.go
Normal file
54
sm4_test/ccm_sm4_test.go
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
package sm4_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/hex"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
smcipher "github.com/emmansun/gmsm/cipher"
|
||||||
|
"github.com/emmansun/gmsm/sm4"
|
||||||
|
)
|
||||||
|
|
||||||
|
var sm4CCMTests = []struct {
|
||||||
|
key, nonce, plaintext, ad, result string
|
||||||
|
}{
|
||||||
|
{ // https://tools.ietf.org/html/rfc8998 A.2. SM4-CCM Test Vectors
|
||||||
|
"0123456789abcdeffedcba9876543210",
|
||||||
|
"00001234567800000000abcd",
|
||||||
|
"aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbccccccccccccccccddddddddddddddddeeeeeeeeeeeeeeeeffffffffffffffffeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaa",
|
||||||
|
"feedfacedeadbeeffeedfacedeadbeefabaddad2",
|
||||||
|
"48af93501fa62adbcd414cce6034d895dda1bf8f132f042098661572e7483094fd12e518ce062c98acee28d95df4416bed31a2f04476c18bb40c84a74b97dc5b16842d4fa186f56ab33256971fa110f4",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCCM(t *testing.T) {
|
||||||
|
for i, tt := range sm4CCMTests {
|
||||||
|
nonce, _ := hex.DecodeString(tt.nonce)
|
||||||
|
plaintext, _ := hex.DecodeString(tt.plaintext)
|
||||||
|
ad, _ := hex.DecodeString(tt.ad)
|
||||||
|
key, _ := hex.DecodeString(tt.key)
|
||||||
|
tagSize := (len(tt.result) - len(tt.plaintext)) / 2
|
||||||
|
c, err := sm4.NewCipher(key)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
sm4ccm, err := smcipher.NewCCMWithNonceAndTagSize(c, len(nonce), tagSize)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
ct := sm4ccm.Seal(nil, nonce, plaintext, ad)
|
||||||
|
if ctHex := hex.EncodeToString(ct); ctHex != tt.result {
|
||||||
|
t.Errorf("#%d: got %s, want %s", i, ctHex, tt.result)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
//func (c *ccm) Open(dst, nonce, ciphertext, data []byte) ([]byte, error)
|
||||||
|
pt, err := sm4ccm.Open(nil, nonce, ct, ad)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if ptHex := hex.EncodeToString(pt); ptHex != tt.plaintext {
|
||||||
|
t.Errorf("#%d: got %s, want %s", i, ptHex, tt.plaintext)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -203,6 +203,13 @@ var sm4GCMTests = []struct {
|
|||||||
"",
|
"",
|
||||||
"250327c674aaf477aef2675748cf6971",
|
"250327c674aaf477aef2675748cf6971",
|
||||||
},
|
},
|
||||||
|
{ // https://tools.ietf.org/html/rfc8998 A.1. SM4-GCM Test Vectors
|
||||||
|
"0123456789abcdeffedcba9876543210",
|
||||||
|
"00001234567800000000abcd",
|
||||||
|
"aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbccccccccccccccccddddddddddddddddeeeeeeeeeeeeeeeeffffffffffffffffeeeeeeeeeeeeeeeeaaaaaaaaaaaaaaaa",
|
||||||
|
"feedfacedeadbeeffeedfacedeadbeefabaddad2",
|
||||||
|
"17f399f08c67d5ee19d0dc9969c4bb7d5fd46fd3756489069157b282bb200735d82710ca5c22f0ccfa7cbf93d496ac15a56834cbcf98c397b4024a2691233b8d83de3541e4c2b58177e065a9bf7b62ec",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSM4GCM(t *testing.T) {
|
func TestSM4GCM(t *testing.T) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user