|
1 | 1 | package message
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "crypto/rand" |
| 5 | + "math/big" |
4 | 6 | "testing"
|
5 | 7 |
|
6 | 8 | ec "github.com/bitcoin-sv/go-sdk/primitives/ec"
|
@@ -48,3 +50,27 @@ func TestSignedMessage(t *testing.T) {
|
48 | 50 | })
|
49 | 51 |
|
50 | 52 | }
|
| 53 | + |
| 54 | +func TestEdgeCases(t *testing.T) { |
| 55 | + signingPriv, _ := ec.PrivateKeyFromBytes([]byte{15}) |
| 56 | + |
| 57 | + message := make([]byte, 32) |
| 58 | + for i := 0; i < 10000; i++ { |
| 59 | + rand.Read(message) |
| 60 | + signature, err := signingPriv.Sign(message) |
| 61 | + require.NoError(t, err) |
| 62 | + |
| 63 | + // Manually set R and S to edge case values (e.g., highest bit set). |
| 64 | + // These values will require padding when encoded in DER. |
| 65 | + signature.R = big.NewInt(0x80) // Example: 128, which in binary is 10000000 |
| 66 | + signature.S = new(big.Int).SetBytes([]byte{0x80, 0x00, 0x00, 0x01}) // Example edge case |
| 67 | + |
| 68 | + signatureSerialized := signature.Serialize() |
| 69 | + signatureDER, err := signature.ToDER() |
| 70 | + require.NoError(t, err) |
| 71 | + |
| 72 | + require.Equal(t, signatureSerialized, signatureDER) |
| 73 | + require.Equal(t, len(signatureSerialized), len(signatureDER)) |
| 74 | + t.Logf("Signature serialized: %d %x - %d %x\n", len(signatureDER), signatureDER, len(signatureSerialized), signatureSerialized) |
| 75 | + } |
| 76 | +} |
0 commit comments