@@ -615,7 +615,8 @@ func TestSignRequestDiscardSig(t *testing.T) {
615615
616616func readRequest (s string ) * http.Request {
617617 in := strings .NewReader (s )
618- req , _ := http .ReadRequest (bufio .NewReader (in ))
618+ req , err := http .ReadRequest (bufio .NewReader (in ))
619+ _ = err
619620 return req
620621}
621622
@@ -1703,3 +1704,90 @@ func TestSignatureContext(t *testing.T) {
17031704 err = VerifyResponse ("sig2" , * verifier3 , res , nil )
17041705 assert .Error (t , err , "should have failed to verify response" )
17051706}
1707+
1708+ var httpTransform1 = `GET /demo?name1=Value1&Name2=value2 HTTP/1.1
1709+ Host: example.org
1710+ Date: Fri, 15 Jul 2022 14:24:55 GMT
1711+ Accept: application/json
1712+ Accept: */*
1713+ Signature-Input: transform=("@method" "@path" "@authority" "accept");created=1618884473;keyid="test-key-ed25519"
1714+ Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5JZ1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:
1715+
1716+ `
1717+
1718+ var httpTransform2 = `GET /demo?name1=Value1&Name2=value2¶m=added HTTP/1.1
1719+ Host: example.org
1720+ Date: Fri, 15 Jul 2022 14:24:55 GMT
1721+ Accept: application/json
1722+ Accept: */*
1723+ Accept-Language: en-US,en;q=0.5
1724+ Signature-Input: transform=("@method" "@path" "@authority" "accept");created=1618884473;keyid="test-key-ed25519"
1725+ Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5JZ1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:
1726+
1727+ `
1728+
1729+ var httpTransform3 = `GET /demo?name1=Value1&Name2=value2 HTTP/1.1
1730+ Host: example.org
1731+ Referer: https://developer.example.org/demo
1732+ Accept: application/json, */*
1733+ Signature-Input: transform=("@method" "@path" "@authority" "accept");created=1618884473;keyid="test-key-ed25519"
1734+ Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5JZ1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:
1735+
1736+ `
1737+
1738+ var httpTransform4 = `GET /demo?name1=Value1&Name2=value2 HTTP/1.1
1739+ Accept: application/json
1740+ Accept: */*
1741+ Date: Fri, 15 Jul 2022 14:24:55 GMT
1742+ Host: example.org
1743+ Signature-Input: transform=("@method" "@path" "@authority" "accept");created=1618884473;keyid="test-key-ed25519"
1744+ Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5JZ1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:
1745+
1746+ `
1747+
1748+ var httpTransform5 = `POST /demo?name1=Value1&Name2=value2 HTTP/1.1
1749+ Host: example.com
1750+ Date: Fri, 15 Jul 2022 14:24:55 GMT
1751+ Accept: application/json
1752+ Accept: */*
1753+ Signature-Input: transform=("@method" "@path" "@authority" "accept");created=1618884473;keyid="test-key-ed25519"
1754+ Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5JZ1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:
1755+
1756+ `
1757+
1758+ var httpTransform6 = `GET /demo?name1=Value1&Name2=value2 HTTP/1.1
1759+ Host: example.org
1760+ Date: Fri, 15 Jul 2022 14:24:55 GMT
1761+ Accept: */*
1762+ Accept: application/json
1763+ Signature-Input: transform=("@method" "@path" "@authority" "accept");created=1618884473;keyid="test-key-ed25519"
1764+ Signature: transform=:ZT1kooQsEHpZ0I1IjCqtQppOmIqlJPeo7DHR3SoMn0s5JZ1eRGS0A+vyYP9t/LXlh5QMFFQ6cpLt2m0pmj3NDA==:
1765+
1766+ `
1767+
1768+ func testOneTransformation (t * testing.T , msg string , verifies bool ) {
1769+ // Initial verification successful
1770+ prvKey , err := parseEdDSAPrivateKeyFromPemStr (ed25519PrvKey )
1771+ if err != nil {
1772+ t .Errorf ("cannot parse public key: %v" , err )
1773+ }
1774+ pubKey := prvKey .Public ().(ed25519.PublicKey )
1775+ verifier , err := NewEd25519Verifier ("test-key-ed25519" , pubKey , NewVerifyConfig ().SetVerifyCreated (false ), * NewFields ())
1776+ assert .NoError (t , err , "could not create verifier" )
1777+ req := readRequest (msg )
1778+ err = VerifyRequest ("transform" , * verifier , req )
1779+ if verifies {
1780+ assert .NoError (t , err , "failed to verify request" )
1781+ } else {
1782+ assert .Error (t , err , "should fail to verify request" )
1783+ }
1784+ }
1785+
1786+ func TestTransformations (t * testing.T ) {
1787+ testOneTransformation (t , httpTransform1 , true )
1788+ testOneTransformation (t , httpTransform2 , true )
1789+ testOneTransformation (t , httpTransform3 , true )
1790+ testOneTransformation (t , httpTransform4 , true )
1791+ testOneTransformation (t , httpTransform5 , false )
1792+ testOneTransformation (t , httpTransform6 , false )
1793+ }
0 commit comments