Remove deprecated test files and optimize encryption functions
- 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:
@@ -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) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user