Remove deprecated test files and optimize encryption functions
Some checks failed
Go / build (push) Has been cancelled
Go / release (push) Has been cancelled

- Deleted `testresults.txt` and `testmain_test.go` as they were no longer needed.
- Updated the Go workflow to streamline the build process by removing commented-out build steps for various platforms.
- Refactored encryption benchmarks to improve performance and clarity in the `benchmark_test.go` file.
- Introduced a new LICENSE file for the encryption package, specifying the MIT License.
- Enhanced the README with usage instructions and links to the NIP-44 specification.
- Bumped version to v0.25.3 to reflect these changes.
This commit is contained in:
2025-11-05 13:28:17 +00:00
parent 256537ba86
commit 7af08f9fd2
15 changed files with 699 additions and 1104 deletions

View File

@@ -3,8 +3,8 @@ package encryption
import (
"testing"
"next.orly.dev/pkg/interfaces/signer/p8k"
"lukechampine.com/frand"
"next.orly.dev/pkg/interfaces/signer/p8k"
)
// createTestConversationKey creates a test conversation key
@@ -25,12 +25,12 @@ func createTestKeyPair() (*p8k.Signer, []byte) {
func BenchmarkNIP44Encrypt(b *testing.B) {
conversationKey := createTestConversationKey()
plaintext := []byte("This is a test message for encryption benchmarking")
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_, err := Encrypt(plaintext, conversationKey)
_, err := Encrypt(conversationKey, plaintext, nil)
if err != nil {
b.Fatal(err)
}
@@ -41,12 +41,12 @@ func BenchmarkNIP44Encrypt(b *testing.B) {
func BenchmarkNIP44EncryptSmall(b *testing.B) {
conversationKey := createTestConversationKey()
plaintext := []byte("a")
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_, err := Encrypt(plaintext, conversationKey)
_, err := Encrypt(conversationKey, plaintext, nil)
if err != nil {
b.Fatal(err)
}
@@ -60,12 +60,12 @@ func BenchmarkNIP44EncryptLarge(b *testing.B) {
for i := range plaintext {
plaintext[i] = byte(i % 256)
}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_, err := Encrypt(plaintext, conversationKey)
_, err := Encrypt(conversationKey, plaintext, nil)
if err != nil {
b.Fatal(err)
}
@@ -76,16 +76,16 @@ func BenchmarkNIP44EncryptLarge(b *testing.B) {
func BenchmarkNIP44Decrypt(b *testing.B) {
conversationKey := createTestConversationKey()
plaintext := []byte("This is a test message for encryption benchmarking")
ciphertext, err := Encrypt(plaintext, conversationKey)
ciphertext, err := Encrypt(conversationKey, plaintext, nil)
if err != nil {
b.Fatal(err)
}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_, err := Decrypt(ciphertext, conversationKey)
_, err := Decrypt(conversationKey, ciphertext)
if err != nil {
b.Fatal(err)
}
@@ -96,16 +96,16 @@ func BenchmarkNIP44Decrypt(b *testing.B) {
func BenchmarkNIP44DecryptSmall(b *testing.B) {
conversationKey := createTestConversationKey()
plaintext := []byte("a")
ciphertext, err := Encrypt(plaintext, conversationKey)
ciphertext, err := Encrypt(conversationKey, plaintext, nil)
if err != nil {
b.Fatal(err)
}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_, err := Decrypt(ciphertext, conversationKey)
_, err := Decrypt(conversationKey, ciphertext)
if err != nil {
b.Fatal(err)
}
@@ -119,16 +119,16 @@ func BenchmarkNIP44DecryptLarge(b *testing.B) {
for i := range plaintext {
plaintext[i] = byte(i % 256)
}
ciphertext, err := Encrypt(plaintext, conversationKey)
ciphertext, err := Encrypt(conversationKey, plaintext, nil)
if err != nil {
b.Fatal(err)
}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_, err := Decrypt(ciphertext, conversationKey)
_, err := Decrypt(conversationKey, ciphertext)
if err != nil {
b.Fatal(err)
}
@@ -139,16 +139,16 @@ func BenchmarkNIP44DecryptLarge(b *testing.B) {
func BenchmarkNIP44RoundTrip(b *testing.B) {
conversationKey := createTestConversationKey()
plaintext := []byte("This is a test message for encryption benchmarking")
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
ciphertext, err := Encrypt(plaintext, conversationKey)
ciphertext, err := Encrypt(conversationKey, plaintext, nil)
if err != nil {
b.Fatal(err)
}
_, err = Decrypt(ciphertext, conversationKey)
_, err = Decrypt(conversationKey, ciphertext)
if err != nil {
b.Fatal(err)
}
@@ -159,10 +159,10 @@ func BenchmarkNIP44RoundTrip(b *testing.B) {
func BenchmarkNIP4Encrypt(b *testing.B) {
key := createTestConversationKey()
msg := []byte("This is a test message for NIP-4 encryption benchmarking")
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_, err := EncryptNip4(msg, key)
if err != nil {
@@ -179,10 +179,10 @@ func BenchmarkNIP4Decrypt(b *testing.B) {
if err != nil {
b.Fatal(err)
}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
decrypted, err := DecryptNip4(ciphertext, key)
if err != nil {
@@ -198,10 +198,10 @@ func BenchmarkNIP4Decrypt(b *testing.B) {
func BenchmarkNIP4RoundTrip(b *testing.B) {
key := createTestConversationKey()
msg := []byte("This is a test message for NIP-4 encryption benchmarking")
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
ciphertext, err := EncryptNip4(msg, key)
if err != nil {
@@ -216,32 +216,42 @@ func BenchmarkNIP4RoundTrip(b *testing.B) {
// BenchmarkGenerateConversationKey benchmarks conversation key generation
func BenchmarkGenerateConversationKey(b *testing.B) {
signer1, pub1 := createTestKeyPair()
signer1, _ := createTestKeyPair()
signer2, _ := createTestKeyPair()
// Get compressed public keys
pub1, err := signer1.PubCompressed()
if err != nil {
b.Fatal(err)
}
pub2, err := signer2.PubCompressed()
if err != nil {
b.Fatal(err)
}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_, err := GenerateConversationKeyWithSigner(signer1, pub1)
_, err := GenerateConversationKey(signer1.Sec(), pub1)
if err != nil {
b.Fatal(err)
}
// Use signer2's pubkey for next iteration to vary inputs
pub1 = signer2.Pub()
pub1 = pub2
}
}
// BenchmarkCalcPadding benchmarks padding calculation
func BenchmarkCalcPadding(b *testing.B) {
sizes := []int{1, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
size := sizes[i%len(sizes)]
_ = CalcPadding(size)
_ = calcPadding(size)
}
}
@@ -249,12 +259,12 @@ func BenchmarkCalcPadding(b *testing.B) {
func BenchmarkGetKeys(b *testing.B) {
conversationKey := createTestConversationKey()
nonce := frand.Bytes(32)
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_, _, _, err := getKeys(conversationKey, nonce)
_, _, _, err := MessageKeys(conversationKey, nonce)
if err != nil {
b.Fatal(err)
}
@@ -269,12 +279,12 @@ func BenchmarkEncryptInternal(b *testing.B) {
for i := range message {
message[i] = byte(i % 256)
}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_, err := encrypt(key, nonce, message)
_, err := chacha20_(key, nonce, message)
if err != nil {
b.Fatal(err)
}
@@ -289,10 +299,10 @@ func BenchmarkSHA256Hmac(b *testing.B) {
for i := range ciphertext {
ciphertext[i] = byte(i % 256)
}
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_, err := sha256Hmac(key, ciphertext, nonce)
if err != nil {
@@ -300,4 +310,3 @@ func BenchmarkSHA256Hmac(b *testing.B) {
}
}
}