init: v1.0.0

This commit is contained in:
yaole
2026-05-27 23:03:00 +08:00
commit 8d97f750eb
466 changed files with 80067 additions and 0 deletions
+112
View File
@@ -0,0 +1,112 @@
package pbkd
import (
"bytes"
"fmt"
"testing"
"golang.org/x/crypto/pbkdf2"
"xdx.jelly/xgcl/grand"
"xdx.jelly/xgcl/sm/sm3"
)
func TestPbkdfHF(t *testing.T) {
password := "1234567812345678"
salt := []byte("12345678")
key, err := kdf(newPrfHmacSm3([]byte(password)), salt, 1000, 16)
if err != nil {
t.Fatal("PBKD failed")
}
fmt.Printf("%x\n", key)
}
func TestPbkdf2(t *testing.T) {
password := "12345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678"
salt := []byte("12345678")
key, err := PbkdfWithHmacSm3([]byte(password), salt, 1000, 16)
if err != nil {
t.Fatal("PBKD failed")
}
key2 := pbkdf2.Key([]byte(password), salt, 1000, 16, sm3.New)
if !bytes.Equal(key, key2) {
t.Logf("%x\n", key)
t.Logf("%x\n", key2)
}
}
func TestPbkdf(t *testing.T) {
password := "passsword"
salt := []byte("12345678")
key, err := PbkdfWithHmacSm3([]byte(password), salt, 1000, 16)
key2 := pbkdf2.Key([]byte(password), salt, 1000, 16, sm3.New)
if err != nil {
t.Fatal("PBKD failed")
}
t.Logf("%x\n", key) //b30fea078d13ba4e2199936a2f593f9d
t.Logf("%x\n", key2) //b30fea078d13ba4e2199936a2f593f9d
}
func TestPbes(t *testing.T) {
password := []byte("12345678")
salt := grand.GetRandom(16)
data := []byte("abcdefghabcdefgh") // 16 bytes
iv := grand.GetRandom(16)
pbes, err := NewPbesWithSm4Cbc(password, salt, MildCount, iv)
if err != nil {
t.Fatal("pbes failed")
}
var buf bytes.Buffer
for i := 0; i < 2; i++ {
c, err := pbes.EncryptBlocks(nil, data)
if err != nil {
t.Fatal("pbes failed")
}
buf.Write(c)
}
// last block, padding
c, err := pbes.EncryptWithPadding(data)
if err != nil {
t.Fatal("pbes failed")
}
buf.Write(c)
cipherText := buf.Bytes()
fmt.Printf("CipherText = %02x\n", cipherText)
// decrypt - 需要重置IV
pbes.ResetIv(iv)
plainText, err := pbes.DecryptWithPadding(cipherText)
if err != nil {
t.Fatal("pbes failed")
}
fmt.Printf("plainText = %s\n", plainText)
for i := 0; i < len(plainText)/16; i++ {
if bytes.Compare(plainText[i*16:(i+1)*16], data) != 0 {
t.Fatal("pbes failed")
}
}
}
func TestPbmac(t *testing.T) {
password := []byte("12345678")
salt := grand.GetRandom(16)
data := []byte("abcdefgh")
pbmac, err := NewPbmacWithHmacSm3(password, salt, MildCount)
if err != nil {
t.Fatal("pbmac failed")
}
mac, err := pbmac.ComputeMAC(data)
if err != nil {
t.Fatal("compute mac failed")
}
fmt.Printf("Mac: %02x\n", mac)
err = pbmac.VerifyMAC(mac, data)
if err != nil {
t.Fatal("verify mac failed")
}
}