github.com/zntrio/harp/v2@v2.0.9/pkg/sdk/security/crypto/paseto/v4/helpers_test.go (about) 1 // Licensed to Elasticsearch B.V. under one or more contributor 2 // license agreements. See the NOTICE file distributed with 3 // this work for additional information regarding copyright 4 // ownership. Elasticsearch B.V. licenses this file to you under 5 // the Apache License, Version 2.0 (the "License"); you may 6 // not use this file except in compliance with the License. 7 // You may obtain a copy of the License at 8 // 9 // http://www.apache.org/licenses/LICENSE-2.0 10 // 11 // Unless required by applicable law or agreed to in writing, 12 // software distributed under the License is distributed on an 13 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 // KIND, either express or implied. See the License for the 15 // specific language governing permissions and limitations 16 // under the License. 17 18 package v4 19 20 import ( 21 "crypto/ed25519" 22 "crypto/rand" 23 "encoding/hex" 24 "testing" 25 26 "github.com/stretchr/testify/assert" 27 ) 28 29 // https://github.com/paseto-standard/test-vectors/blob/master/v4.json 30 func Test_Paseto_LocalVector(t *testing.T) { 31 testCases := []struct { 32 name string 33 expectFail bool 34 key string 35 nonce string 36 token string 37 payload string 38 footer string 39 implicitAssertion string 40 }{ 41 { 42 name: "4-E-1", 43 expectFail: false, 44 key: "707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f", 45 nonce: "0000000000000000000000000000000000000000000000000000000000000000", 46 token: "v4.local.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAr68PS4AXe7If_ZgesdkUMvSwscFlAl1pk5HC0e8kApeaqMfGo_7OpBnwJOAbY9V7WU6abu74MmcUE8YWAiaArVI8XJ5hOb_4v9RmDkneN0S92dx0OW4pgy7omxgf3S8c3LlQg", 47 payload: "{\"data\":\"this is a secret message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}", 48 footer: "", 49 implicitAssertion: "", 50 }, 51 { 52 name: "4-E-2", 53 expectFail: false, 54 key: "707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f", 55 nonce: "0000000000000000000000000000000000000000000000000000000000000000", 56 token: "v4.local.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAr68PS4AXe7If_ZgesdkUMvS2csCgglvpk5HC0e8kApeaqMfGo_7OpBnwJOAbY9V7WU6abu74MmcUE8YWAiaArVI8XIemu9chy3WVKvRBfg6t8wwYHK0ArLxxfZP73W_vfwt5A", 57 payload: "{\"data\":\"this is a hidden message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}", 58 footer: "", 59 implicitAssertion: "", 60 }, 61 { 62 name: "4-E-3", 63 expectFail: false, 64 nonce: "df654812bac492663825520ba2f6e67cf5ca5bdc13d4e7507a98cc4c2fcc3ad8", 65 key: "707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f", 66 token: "v4.local.32VIErrEkmY4JVILovbmfPXKW9wT1OdQepjMTC_MOtjA4kiqw7_tcaOM5GNEcnTxl60WkwMsYXw6FSNb_UdJPXjpzm0KW9ojM5f4O2mRvE2IcweP-PRdoHjd5-RHCiExR1IK6t6-tyebyWG6Ov7kKvBdkrrAJ837lKP3iDag2hzUPHuMKA", 67 payload: "{\"data\":\"this is a secret message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}", 68 footer: "", 69 implicitAssertion: "", 70 }, 71 { 72 name: "4-E-4", 73 expectFail: false, 74 nonce: "df654812bac492663825520ba2f6e67cf5ca5bdc13d4e7507a98cc4c2fcc3ad8", 75 key: "707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f", 76 token: "v4.local.32VIErrEkmY4JVILovbmfPXKW9wT1OdQepjMTC_MOtjA4kiqw7_tcaOM5GNEcnTxl60WiA8rd3wgFSNb_UdJPXjpzm0KW9ojM5f4O2mRvE2IcweP-PRdoHjd5-RHCiExR1IK6t4gt6TiLm55vIH8c_lGxxZpE3AWlH4WTR0v45nsWoU3gQ", 77 payload: "{\"data\":\"this is a hidden message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}", 78 footer: "", 79 implicitAssertion: "", 80 }, 81 { 82 name: "4-E-5", 83 expectFail: false, 84 nonce: "df654812bac492663825520ba2f6e67cf5ca5bdc13d4e7507a98cc4c2fcc3ad8", 85 key: "707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f", 86 token: "v4.local.32VIErrEkmY4JVILovbmfPXKW9wT1OdQepjMTC_MOtjA4kiqw7_tcaOM5GNEcnTxl60WkwMsYXw6FSNb_UdJPXjpzm0KW9ojM5f4O2mRvE2IcweP-PRdoHjd5-RHCiExR1IK6t4x-RMNXtQNbz7FvFZ_G-lFpk5RG3EOrwDL6CgDqcerSQ.eyJraWQiOiJ6VmhNaVBCUDlmUmYyc25FY1Q3Z0ZUaW9lQTlDT2NOeTlEZmdMMVc2MGhhTiJ9", 87 payload: "{\"data\":\"this is a secret message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}", 88 footer: "{\"kid\":\"zVhMiPBP9fRf2snEcT7gFTioeA9COcNy9DfgL1W60haN\"}", 89 implicitAssertion: "", 90 }, 91 { 92 name: "4-E-6", 93 expectFail: false, 94 nonce: "df654812bac492663825520ba2f6e67cf5ca5bdc13d4e7507a98cc4c2fcc3ad8", 95 key: "707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f", 96 token: "v4.local.32VIErrEkmY4JVILovbmfPXKW9wT1OdQepjMTC_MOtjA4kiqw7_tcaOM5GNEcnTxl60WiA8rd3wgFSNb_UdJPXjpzm0KW9ojM5f4O2mRvE2IcweP-PRdoHjd5-RHCiExR1IK6t6pWSA5HX2wjb3P-xLQg5K5feUCX4P2fpVK3ZLWFbMSxQ.eyJraWQiOiJ6VmhNaVBCUDlmUmYyc25FY1Q3Z0ZUaW9lQTlDT2NOeTlEZmdMMVc2MGhhTiJ9", 97 payload: "{\"data\":\"this is a hidden message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}", 98 footer: "{\"kid\":\"zVhMiPBP9fRf2snEcT7gFTioeA9COcNy9DfgL1W60haN\"}", 99 implicitAssertion: "", 100 }, 101 { 102 name: "4-E-7", 103 expectFail: false, 104 nonce: "df654812bac492663825520ba2f6e67cf5ca5bdc13d4e7507a98cc4c2fcc3ad8", 105 key: "707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f", 106 token: "v4.local.32VIErrEkmY4JVILovbmfPXKW9wT1OdQepjMTC_MOtjA4kiqw7_tcaOM5GNEcnTxl60WkwMsYXw6FSNb_UdJPXjpzm0KW9ojM5f4O2mRvE2IcweP-PRdoHjd5-RHCiExR1IK6t40KCCWLA7GYL9KFHzKlwY9_RnIfRrMQpueydLEAZGGcA.eyJraWQiOiJ6VmhNaVBCUDlmUmYyc25FY1Q3Z0ZUaW9lQTlDT2NOeTlEZmdMMVc2MGhhTiJ9", 107 payload: "{\"data\":\"this is a secret message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}", 108 footer: "{\"kid\":\"zVhMiPBP9fRf2snEcT7gFTioeA9COcNy9DfgL1W60haN\"}", 109 implicitAssertion: "{\"test-vector\":\"4-E-7\"}", 110 }, 111 { 112 name: "4-E-8", 113 expectFail: false, 114 nonce: "df654812bac492663825520ba2f6e67cf5ca5bdc13d4e7507a98cc4c2fcc3ad8", 115 key: "707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f", 116 token: "v4.local.32VIErrEkmY4JVILovbmfPXKW9wT1OdQepjMTC_MOtjA4kiqw7_tcaOM5GNEcnTxl60WiA8rd3wgFSNb_UdJPXjpzm0KW9ojM5f4O2mRvE2IcweP-PRdoHjd5-RHCiExR1IK6t5uvqQbMGlLLNYBc7A6_x7oqnpUK5WLvj24eE4DVPDZjw.eyJraWQiOiJ6VmhNaVBCUDlmUmYyc25FY1Q3Z0ZUaW9lQTlDT2NOeTlEZmdMMVc2MGhhTiJ9", 117 payload: "{\"data\":\"this is a hidden message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}", 118 footer: "{\"kid\":\"zVhMiPBP9fRf2snEcT7gFTioeA9COcNy9DfgL1W60haN\"}", 119 implicitAssertion: "{\"test-vector\":\"4-E-8\"}", 120 }, 121 { 122 name: "4-E-9", 123 expectFail: false, 124 nonce: "df654812bac492663825520ba2f6e67cf5ca5bdc13d4e7507a98cc4c2fcc3ad8", 125 key: "707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f", 126 token: "v4.local.32VIErrEkmY4JVILovbmfPXKW9wT1OdQepjMTC_MOtjA4kiqw7_tcaOM5GNEcnTxl60WiA8rd3wgFSNb_UdJPXjpzm0KW9ojM5f4O2mRvE2IcweP-PRdoHjd5-RHCiExR1IK6t6tybdlmnMwcDMw0YxA_gFSE_IUWl78aMtOepFYSWYfQA.YXJiaXRyYXJ5LXN0cmluZy10aGF0LWlzbid0LWpzb24", 127 payload: "{\"data\":\"this is a hidden message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}", 128 footer: "arbitrary-string-that-isn't-json", 129 implicitAssertion: "{\"test-vector\":\"4-E-9\"}", 130 }, 131 } 132 133 // For each testcase 134 for _, tc := range testCases { 135 testCase := tc 136 t.Run(testCase.name, func(t *testing.T) { 137 // Decode input 138 key, err := hex.DecodeString(testCase.key) 139 assert.NoError(t, err) 140 n, err := hex.DecodeString(testCase.nonce) 141 assert.NoError(t, err) 142 143 // Encrypt 144 token, err := encrypt(key, n, []byte(testCase.payload), testCase.footer, testCase.implicitAssertion) 145 if (err != nil) != testCase.expectFail { 146 t.Errorf("error during the encrypt call, error = %v, wantErr %v", err, testCase.expectFail) 147 return 148 } 149 assert.Equal(t, testCase.token, string(token)) 150 151 // Decrypt 152 message, err := Decrypt(key, []byte(testCase.token), testCase.footer, testCase.implicitAssertion) 153 if (err != nil) != testCase.expectFail { 154 t.Errorf("error during the decrypt call, error = %v, wantErr %v", err, testCase.expectFail) 155 return 156 } 157 assert.Equal(t, testCase.payload, string(message)) 158 }) 159 } 160 } 161 162 // https://github.com/paseto-standard/test-vectors/blob/master/v4.json 163 func Test_Paseto_PublicVector(t *testing.T) { 164 testCases := []struct { 165 name string 166 expectFail bool 167 publicKey string 168 secretKey string 169 secretKeySeed string 170 secretKeyPem string 171 publicKeyPem string 172 token string 173 payload string 174 footer string 175 implicitAssertion string 176 }{ 177 { 178 name: "4-S-1", 179 expectFail: false, 180 publicKey: "1eb9dbbbbc047c03fd70604e0071f0987e16b28b757225c11f00415d0e20b1a2", 181 secretKey: "b4cbfb43df4ce210727d953e4a713307fa19bb7d9f85041438d9e11b942a37741eb9dbbbbc047c03fd70604e0071f0987e16b28b757225c11f00415d0e20b1a2", 182 secretKeySeed: "b4cbfb43df4ce210727d953e4a713307fa19bb7d9f85041438d9e11b942a3774", 183 secretKeyPem: "-----BEGIN PRIVATE KEY-----\nMC4CAQAwBQYDK2VwBCIEILTL+0PfTOIQcn2VPkpxMwf6Gbt9n4UEFDjZ4RuUKjd0\n-----END PRIVATE KEY-----", 184 publicKeyPem: "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAHrnbu7wEfAP9cGBOAHHwmH4Wsot1ciXBHwBBXQ4gsaI=\n-----END PUBLIC KEY-----", 185 token: "v4.public.eyJkYXRhIjoidGhpcyBpcyBhIHNpZ25lZCBtZXNzYWdlIiwiZXhwIjoiMjAyMi0wMS0wMVQwMDowMDowMCswMDowMCJ9bg_XBBzds8lTZShVlwwKSgeKpLT3yukTw6JUz3W4h_ExsQV-P0V54zemZDcAxFaSeef1QlXEFtkqxT1ciiQEDA", 186 payload: "{\"data\":\"this is a signed message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}", 187 footer: "", 188 implicitAssertion: "", 189 }, 190 { 191 name: "4-S-2", 192 expectFail: false, 193 publicKey: "1eb9dbbbbc047c03fd70604e0071f0987e16b28b757225c11f00415d0e20b1a2", 194 secretKey: "b4cbfb43df4ce210727d953e4a713307fa19bb7d9f85041438d9e11b942a37741eb9dbbbbc047c03fd70604e0071f0987e16b28b757225c11f00415d0e20b1a2", 195 secretKeySeed: "b4cbfb43df4ce210727d953e4a713307fa19bb7d9f85041438d9e11b942a3774", 196 secretKeyPem: "-----BEGIN PRIVATE KEY-----\nMC4CAQAwBQYDK2VwBCIEILTL+0PfTOIQcn2VPkpxMwf6Gbt9n4UEFDjZ4RuUKjd0\n-----END PRIVATE KEY-----", 197 publicKeyPem: "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAHrnbu7wEfAP9cGBOAHHwmH4Wsot1ciXBHwBBXQ4gsaI=\n-----END PUBLIC KEY-----", 198 token: "v4.public.eyJkYXRhIjoidGhpcyBpcyBhIHNpZ25lZCBtZXNzYWdlIiwiZXhwIjoiMjAyMi0wMS0wMVQwMDowMDowMCswMDowMCJ9v3Jt8mx_TdM2ceTGoqwrh4yDFn0XsHvvV_D0DtwQxVrJEBMl0F2caAdgnpKlt4p7xBnx1HcO-SPo8FPp214HDw.eyJraWQiOiJ6VmhNaVBCUDlmUmYyc25FY1Q3Z0ZUaW9lQTlDT2NOeTlEZmdMMVc2MGhhTiJ9", 199 payload: "{\"data\":\"this is a signed message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}", 200 footer: "{\"kid\":\"zVhMiPBP9fRf2snEcT7gFTioeA9COcNy9DfgL1W60haN\"}", 201 implicitAssertion: "", 202 }, 203 { 204 name: "4-S-3", 205 expectFail: false, 206 publicKey: "1eb9dbbbbc047c03fd70604e0071f0987e16b28b757225c11f00415d0e20b1a2", 207 secretKey: "b4cbfb43df4ce210727d953e4a713307fa19bb7d9f85041438d9e11b942a37741eb9dbbbbc047c03fd70604e0071f0987e16b28b757225c11f00415d0e20b1a2", 208 secretKeySeed: "b4cbfb43df4ce210727d953e4a713307fa19bb7d9f85041438d9e11b942a3774", 209 secretKeyPem: "-----BEGIN PRIVATE KEY-----\nMC4CAQAwBQYDK2VwBCIEILTL+0PfTOIQcn2VPkpxMwf6Gbt9n4UEFDjZ4RuUKjd0\n-----END PRIVATE KEY-----", 210 publicKeyPem: "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAHrnbu7wEfAP9cGBOAHHwmH4Wsot1ciXBHwBBXQ4gsaI=\n-----END PUBLIC KEY-----", 211 token: "v4.public.eyJkYXRhIjoidGhpcyBpcyBhIHNpZ25lZCBtZXNzYWdlIiwiZXhwIjoiMjAyMi0wMS0wMVQwMDowMDowMCswMDowMCJ9NPWciuD3d0o5eXJXG5pJy-DiVEoyPYWs1YSTwWHNJq6DZD3je5gf-0M4JR9ipdUSJbIovzmBECeaWmaqcaP0DQ.eyJraWQiOiJ6VmhNaVBCUDlmUmYyc25FY1Q3Z0ZUaW9lQTlDT2NOeTlEZmdMMVc2MGhhTiJ9", 212 payload: "{\"data\":\"this is a signed message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}", 213 footer: "{\"kid\":\"zVhMiPBP9fRf2snEcT7gFTioeA9COcNy9DfgL1W60haN\"}", 214 implicitAssertion: "{\"test-vector\":\"4-S-3\"}", 215 }, 216 } 217 218 // For each testcase 219 for _, tc := range testCases { 220 testCase := tc 221 t.Run(testCase.name, func(t *testing.T) { 222 // Decode input 223 publicKey, err := hex.DecodeString(testCase.publicKey) 224 assert.NoError(t, err) 225 secretKey, err := hex.DecodeString(testCase.secretKey) 226 assert.NoError(t, err) 227 secretKeySeed, err := hex.DecodeString(testCase.secretKeySeed) 228 assert.NoError(t, err) 229 230 // Generate ed25519 key pair 231 sk := ed25519.NewKeyFromSeed(secretKeySeed) 232 assert.Equal(t, secretKey, []byte(sk)) 233 pk := sk.Public().(ed25519.PublicKey) 234 assert.Equal(t, publicKey, []byte(pk)) 235 236 // Sign 237 token, err := Sign([]byte(testCase.payload), sk, testCase.footer, testCase.implicitAssertion) 238 if (err != nil) != testCase.expectFail { 239 t.Errorf("error during the sign call, error = %v, wantErr %v", err, testCase.expectFail) 240 return 241 } 242 assert.Equal(t, testCase.token, string(token)) 243 244 // Verify 245 message, err := Verify([]byte(testCase.token), pk, testCase.footer, testCase.implicitAssertion) 246 if (err != nil) != testCase.expectFail { 247 t.Errorf("error during the verify call, error = %v, wantErr %v", err, testCase.expectFail) 248 return 249 } 250 assert.Equal(t, testCase.payload, string(message)) 251 }) 252 } 253 } 254 255 func Test_Paseto_Local_EncryptDecrypt(t *testing.T) { 256 key, err := hex.DecodeString("707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f") 257 assert.NoError(t, err) 258 259 m := []byte("{\"data\":\"this is a signed message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}") 260 f := "{\"kid\":\"zVhMiPBP9fRf2snEcT7gFTioeA9COcNy9DfgL1W60haN\"}" 261 i := "{\"test-vector\":\"4-S-3\"}" 262 263 token1, err := Encrypt(rand.Reader, key, m, f, i) 264 assert.NoError(t, err) 265 assert.NotEmpty(t, token1) 266 267 token2, err := Encrypt(rand.Reader, key, m, f, i) 268 assert.NoError(t, err) 269 assert.NotEmpty(t, token2) 270 271 assert.NotEqual(t, token1, token2) 272 273 p, err := Decrypt(key, token1, f, i) 274 assert.NoError(t, err) 275 assert.Equal(t, m, p) 276 } 277 278 // ----------------------------------------------------------------------------- 279 280 func benchmarkEncrypt(key, m []byte, f, i string, b *testing.B) { 281 for n := 0; n < b.N; n++ { 282 _, err := Encrypt(rand.Reader, key, m, f, i) 283 if err != nil { 284 b.Fatal(err) 285 } 286 } 287 } 288 289 func Benchmark_Paseto_Encrypt(b *testing.B) { 290 key, err := hex.DecodeString("707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f") 291 assert.NoError(b, err) 292 293 m := []byte("{\"data\":\"this is a signed message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}") 294 f := "{\"kid\":\"zVhMiPBP9fRf2snEcT7gFTioeA9COcNy9DfgL1W60haN\"}" 295 i := "{\"test-vector\":\"4-S-3\"}" 296 297 b.ReportAllocs() 298 b.ResetTimer() 299 300 benchmarkEncrypt(key, m, f, i, b) 301 } 302 303 func benchmarkDecrypt(key, m []byte, f, i string, b *testing.B) { 304 for n := 0; n < b.N; n++ { 305 _, err := Decrypt(key, m, f, i) 306 if err != nil { 307 b.Fatal(err) 308 } 309 } 310 } 311 312 func Benchmark_Paseto_Decrypt(b *testing.B) { 313 key, err := hex.DecodeString("707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f") 314 assert.NoError(b, err) 315 316 m := []byte("v4.local.32VIErrEkmY4JVILovbmfPXKW9wT1OdQepjMTC_MOtjA4kiqw7_tcaOM5GNEcnTxl60WiA8rd3wgFSNb_UdJPXjpzm0KW9ojM5f4O2mRvE2IcweP-PRdoHjd5-RHCiExR1IK6t5uvqQbMGlLLNYBc7A6_x7oqnpUK5WLvj24eE4DVPDZjw.eyJraWQiOiJ6VmhNaVBCUDlmUmYyc25FY1Q3Z0ZUaW9lQTlDT2NOeTlEZmdMMVc2MGhhTiJ9") 317 f := "{\"kid\":\"zVhMiPBP9fRf2snEcT7gFTioeA9COcNy9DfgL1W60haN\"}" 318 i := "{\"test-vector\":\"4-E-8\"}" 319 320 b.ReportAllocs() 321 b.ResetTimer() 322 323 benchmarkDecrypt(key, m, f, i, b) 324 } 325 326 func benchmarkSign(m []byte, sk ed25519.PrivateKey, f, i string, b *testing.B) { 327 for n := 0; n < b.N; n++ { 328 _, err := Sign(m, sk, f, i) 329 if err != nil { 330 b.Fatal(err) 331 } 332 } 333 } 334 335 func Benchmark_Paseto_Sign(b *testing.B) { 336 sk, err := hex.DecodeString("b4cbfb43df4ce210727d953e4a713307fa19bb7d9f85041438d9e11b942a37741eb9dbbbbc047c03fd70604e0071f0987e16b28b757225c11f00415d0e20b1a2") 337 assert.NoError(b, err) 338 339 m := []byte("{\"data\":\"this is a signed message\",\"exp\":\"2022-01-01T00:00:00+00:00\"}") 340 f := "{\"kid\":\"zVhMiPBP9fRf2snEcT7gFTioeA9COcNy9DfgL1W60haN\"}" 341 i := "{\"test-vector\":\"4-S-3\"}" 342 343 b.ReportAllocs() 344 b.ResetTimer() 345 346 benchmarkSign(m, sk, f, i, b) 347 } 348 349 func benchmarkVerify(m []byte, pk ed25519.PublicKey, f, i string, b *testing.B) { 350 for n := 0; n < b.N; n++ { 351 _, err := Verify(m, pk, f, i) 352 if err != nil { 353 b.Fatal(err) 354 } 355 } 356 } 357 358 func Benchmark_Paseto_Verify(b *testing.B) { 359 pk, err := hex.DecodeString("1eb9dbbbbc047c03fd70604e0071f0987e16b28b757225c11f00415d0e20b1a2") 360 assert.NoError(b, err) 361 362 token := []byte("v4.public.eyJkYXRhIjoidGhpcyBpcyBhIHNpZ25lZCBtZXNzYWdlIiwiZXhwIjoiMjAyMi0wMS0wMVQwMDowMDowMCswMDowMCJ9NPWciuD3d0o5eXJXG5pJy-DiVEoyPYWs1YSTwWHNJq6DZD3je5gf-0M4JR9ipdUSJbIovzmBECeaWmaqcaP0DQ.eyJraWQiOiJ6VmhNaVBCUDlmUmYyc25FY1Q3Z0ZUaW9lQTlDT2NOeTlEZmdMMVc2MGhhTiJ9") 363 f := "{\"kid\":\"zVhMiPBP9fRf2snEcT7gFTioeA9COcNy9DfgL1W60haN\"}" 364 i := "{\"test-vector\":\"4-S-3\"}" 365 366 b.ReportAllocs() 367 b.ResetTimer() 368 369 benchmarkVerify(token, pk, f, i, b) 370 }