• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

google / webcrypto.dart / 25232696112

01 May 2026 08:53PM UTC coverage: 90.337% (-0.1%) from 90.474%
25232696112

push

github

web-flow
ci: trim browser matrix and cache Android AVD (#266)

3730 of 4129 relevant lines covered (90.34%)

1.31 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

82.54
/lib/src/testing/webcrypto/hmac.dart
1
// Copyright 2020 Google LLC
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//      http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14

15
import 'package:webcrypto/webcrypto.dart';
16
import '../utils/utils.dart';
17
import '../utils/testrunner.dart';
18

19
final runner = TestRunner.symmetric<HmacSecretKey>(
3✔
20
  algorithm: 'HMAC',
21
  importPrivateRawKey: (keyData, keyImportParams) =>
1✔
22
      HmacSecretKey.importRawKey(keyData, hashFromJson(keyImportParams)),
2✔
23
  exportPrivateRawKey: (key) => key.exportRawKey(),
2✔
24
  importPrivatePkcs8Key: null, // not supported
25
  exportPrivatePkcs8Key: null,
26
  importPrivateJsonWebKey: (jsonWebKeyData, keyImportParams) =>
1✔
27
      HmacSecretKey.importJsonWebKey(
1✔
28
        jsonWebKeyData,
29
        hashFromJson(keyImportParams),
1✔
30
      ),
31
  exportPrivateJsonWebKey: (key) => key.exportJsonWebKey(),
2✔
32
  generateKey: (generateKeyPairParams) => HmacSecretKey.generateKey(
×
33
    hashFromJson(generateKeyPairParams),
×
34
    length: generateKeyPairParams['length'], // may be null
×
35
  ),
36
  signBytes: (key, data, signParams) => key.signBytes(data),
2✔
37
  signStream: (key, data, signParams) => key.signStream(data),
2✔
38
  verifyBytes: (key, signature, data, verifyParams) =>
1✔
39
      key.verifyBytes(signature, data),
1✔
40
  verifyStream: (key, signature, data, verifyParams) =>
1✔
41
      key.verifyStream(signature, data),
1✔
42
  testData: _testData,
1✔
43
);
44

45
void main() async {
×
46
  log('generate HMAC test case');
×
47
  await runner.generate(
×
48
    generateKeyParams: {'hash': hashToJson(Hash.sha384), 'length': 512},
×
49
    importKeyParams: {'hash': hashToJson(Hash.sha384), 'length': 512},
×
50
    signVerifyParams: {},
×
51
    maxPlaintext: 80,
52
  );
53
  log('--------------------');
×
54

55
  await runner.tests().runTests();
×
56
}
57

58
// Allow single quotes for hardcoded testData written as JSON:
59
// ignore_for_file: prefer_single_quotes
60
final _testData = [
3✔
61
  {
1✔
62
    "name": "HS256 generated on boringssl/linux at 2020-01-17T17:22:02",
63
    "privateRawKeyData": "hJOnqFnCbZUjWwItPd5l1YW9mWC5jjjYT6h5twHEUdU=",
64
    "privateJsonWebKeyData": {
1✔
65
      "kty": "oct",
66
      "use": "sig",
67
      "alg": "HS256",
68
      "k": "hJOnqFnCbZUjWwItPd5l1YW9mWC5jjjYT6h5twHEUdU",
69
    },
70
    "plaintext": "YXRlYSBkaWM=",
71
    "signature": "XNHqkq5E4mJ5cbSoRGJI/Nop7pYeb9tAzajzXC0HB8U=",
72
    "importKeyParams": {"hash": "sha-256"},
1✔
73
    "signVerifyParams": {},
1✔
74
  },
75
  {
1✔
76
    "name": "HS256 generated on chrome/linux at 2020-01-17T17:22:15",
77
    "privateRawKeyData":
78
        "EAACHGiD/ybP+Q/+lcoSUcLmm1D64wN8OUVPhyKfsFMAC7QgcyFAWm8QIyyKsCKzHf/FJMNYtW1WZXAejpoN5g==",
79
    "privateJsonWebKeyData": {
1✔
80
      "kty": "oct",
81
      "alg": "HS256",
82
      "k":
83
          "EAACHGiD_ybP-Q_-lcoSUcLmm1D64wN8OUVPhyKfsFMAC7QgcyFAWm8QIyyKsCKzHf_FJMNYtW1WZXAejpoN5g",
84
    },
85
    "plaintext":
86
        "IGJsYW5kaXQgZWdldCwgcG9ydHRpdG9yIGEgb2Rpby4KQWxpcXVhbSBtYXR0aXMgZ3JhdmlkYSB2aXZlcnJhLiBQZWxsZW50ZXNxdWUgdQ==",
87
    "signature": "AusmDrNk4hWUNpyIgVVNJ/fGKKwipprpa0t9JnuOBMQ=",
88
    "importKeyParams": {"hash": "sha-256"},
1✔
89
    "signVerifyParams": {},
1✔
90
  },
91
  {
1✔
92
    "name": "HS256 generated on firefox/linux at 2020-01-17T17:22:22",
93
    "privateRawKeyData":
94
        "wcdaqRxznwwshJa+JX9yWIWQfzk72zX+hAX3+dGg61flkEGxf4+QAYbPJ/kXQ3I/AHFmciS1ET2IYDefx90BPw==",
95
    "privateJsonWebKeyData": {
1✔
96
      "kty": "oct",
97
      "alg": "HS256",
98
      "k":
99
          "wcdaqRxznwwshJa-JX9yWIWQfzk72zX-hAX3-dGg61flkEGxf4-QAYbPJ_kXQ3I_AHFmciS1ET2IYDefx90BPw",
100
    },
101
    "plaintext":
102
        "dWxhLApxdWlzIHBvcnRhIGFyY3Ugc2NlbGVyaXNxdWUuIFNlZCBmZWxpcyBkb2xvciwgdWx0cmljaWVzIGV1IGR1aSBhdCwg",
103
    "signature": "xnRlZ0cGFck6p30kMt3c4Z1GnKA+Ek99wK9nS8xRmmk=",
104
    "importKeyParams": {"hash": "sha-256"},
1✔
105
    "signVerifyParams": {},
1✔
106
  },
107
  {
1✔
108
    "name": "HS384/512 generated on boringssl/linux at 2020-01-17T17:27:08",
109
    "privateRawKeyData":
110
        "M5FlV0ooh9jtDA+ULhcnRpcbbhrhPTqoPPJMMpIvkpTZAetpJ2nbseRmyDLiuiS4Ea79zF8DJkAcnYrI/2ouDA==",
111
    "privateJsonWebKeyData": {
1✔
112
      "kty": "oct",
113
      "use": "sig",
114
      "alg": "HS384",
115
      "k":
116
          "M5FlV0ooh9jtDA-ULhcnRpcbbhrhPTqoPPJMMpIvkpTZAetpJ2nbseRmyDLiuiS4Ea79zF8DJkAcnYrI_2ouDA",
117
    },
118
    "plaintext":
119
        "dCBuaXNsLiBQcmFlc2VudCBlbmltIG1hZ25hLApyaG9uY3VzIHF1aXMgY29uZGltZW50dW0gYWMs",
120
    "signature":
121
        "Dc6Jiw5A+92IB4RAJh96Y9acoyZgrx75FmFa2Ye3+h+DihU+qiUyTXiuTOrSi53g",
122
    "importKeyParams": {"hash": "sha-384", "length": 512},
1✔
123
    "signVerifyParams": {},
1✔
124
  },
125
  {
1✔
126
    "name": "HS384/512 generated on chrome/linux at 2020-01-17T17:27:15",
127
    "privateRawKeyData":
128
        "pBLSDxNWRIpFxODNstC+Cd+n+e0ABp38wwbALA5o+wJ+r5mgIrLChbKoWmt3zVMWEjDR/qBaHsTuG7kVmnOW9w==",
129
    "privateJsonWebKeyData": {
1✔
130
      "kty": "oct",
131
      "alg": "HS384",
132
      "k":
133
          "pBLSDxNWRIpFxODNstC-Cd-n-e0ABp38wwbALA5o-wJ-r5mgIrLChbKoWmt3zVMWEjDR_qBaHsTuG7kVmnOW9w",
134
    },
135
    "plaintext": "aXQgcXVpcy4gQ3U=",
136
    "signature":
137
        "CZCQz8y18FtWhyzxofYSk47cV/KJjFESt4dR+luhPrMop5cW7QmJTreRLFM4RTKy",
138
    "importKeyParams": {"hash": "sha-384", "length": 512},
1✔
139
    "signVerifyParams": {},
1✔
140
  },
141
  {
1✔
142
    "name": "HS384/512 generated on firefox/linux at 2020-01-17T17:27:21",
143
    "privateRawKeyData":
144
        "xJAxNE2TmomHP+xMSi2hEAHjTPTPNKBACiepH3ijfglWbIVFP3wckj7bQ7QSXvCklewu6ao3HeNUu/kVvdDnJg==",
145
    "privateJsonWebKeyData": {
1✔
146
      "kty": "oct",
147
      "alg": "HS384",
148
      "k":
149
          "xJAxNE2TmomHP-xMSi2hEAHjTPTPNKBACiepH3ijfglWbIVFP3wckj7bQ7QSXvCklewu6ao3HeNUu_kVvdDnJg",
150
    },
151
    "plaintext": "YyBsYW9yZWV0LCBsZQ==",
152
    "signature":
153
        "bhnHVnnqoe1L9T7zHImrjDH4B4YVz+Qrvdfxw1eutajcDu2Plhr49B9GXNArXoS8",
154
    "importKeyParams": {"hash": "sha-384", "length": 512},
1✔
155
    "signVerifyParams": {},
1✔
156
  },
157
  {
1✔
158
    "name": "HS512/37 generated on boringssl/linux at 2020-01-17T17:23:41",
159
    "privateRawKeyData": "kuk/KhA=",
160
    "privateJsonWebKeyData": {
1✔
161
      "kty": "oct",
162
      "use": "sig",
163
      "alg": "HS512",
164
      "k": "kuk_KhA",
165
    },
166
    "plaintext":
167
        "bmEgaWQgbGliZXJvIGV1aXNtb2QKYWxpcXVldC4gTW9yYmkgYWNjdW1zYW4gZ3JhdmlkYSBkb2xvciwgbmVjIGVnZXN0YXMg",
168
    "signature":
169
        "LGncsixAXwdUxThwRwpMUobfBNI8dJvZ78DyRTwu3OrzzcwkA5PNgI1zGNWNTs5X2sxX960uY6bDIYjDlu0bGw==",
170
    "importKeyParams": {"hash": "sha-512", "length": 37},
1✔
171
    "signVerifyParams": {},
1✔
172
  },
173
  {
1✔
174
    "name": "HS512/37 generated chrome/linux at 2020-01-17T17:23:49",
175
    "privateRawKeyData": "fEqx17g=",
176
    "privateJsonWebKeyData": {"kty": "oct", "alg": "HS512", "k": "fEqx17g"},
1✔
177
    "plaintext": "ZHVpIG1hdXJpcy4gU2VkIHBoYXJldHJhLCBu",
178
    "signature":
179
        "ePa3V+068UE7exuKxgeoa/weVTKGnnYPkn2B6NDj23QGaoxYP2wuwoZW9rkCMtJ796pL9Xpa0YLlBYiMukrHCg==",
180
    "importKeyParams": {"hash": "sha-512", "length": 37},
1✔
181
    "signVerifyParams": {},
1✔
182
  },
183
  {
1✔
184
    "name": "HS512/37 generated on firefox/linux at 2020-01-17T17:23:56",
185
    "privateRawKeyData": "Ay0AcA==",
186
    "privateJsonWebKeyData": {"kty": "oct", "alg": "HS512", "k": "Ay0AcA"},
1✔
187
    "plaintext": "bSBtYXR0aXMgZ3JhdmlkYSB2aXZlcnJhLiBQZQ==",
188
    "signature":
189
        "WKl+Xj11ugyC0HGD4458P7vVEAllEyftMPnywgwZwwubW66a3sS+nsCgEBWI163m/ZZ9sUPR8QA0yVEhkVUrwQ==",
190
    "importKeyParams": {"hash": "sha-512", "length": 37},
1✔
191
    "signVerifyParams": {},
1✔
192
  },
193
];
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc