Skip to content

Commit 19b1b49

Browse files
authored
Merge pull request #134 from kenta-wakasa/remove_pad_character
remove pad character "="
2 parents 5bca9e5 + 059406a commit 19b1b49

File tree

2 files changed

+49
-50
lines changed

2 files changed

+49
-50
lines changed

jwk/lib/jwk.dart

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -255,31 +255,31 @@ class Jwk {
255255
{
256256
final value = d;
257257
if (value != null) {
258-
result['d'] = _base64UriEncode(value);
258+
result['d'] = base64UriEncode(value);
259259
}
260260
}
261261
{
262262
final value = dp;
263263
if (value != null) {
264-
result['dp'] = _base64UriEncode(value);
264+
result['dp'] = base64UriEncode(value);
265265
}
266266
}
267267
{
268268
final value = dq;
269269
if (value != null) {
270-
result['dq'] = _base64UriEncode(value);
270+
result['dq'] = base64UriEncode(value);
271271
}
272272
}
273273
{
274274
final value = e;
275275
if (value != null) {
276-
result['e'] = _base64UriEncode(value);
276+
result['e'] = base64UriEncode(value);
277277
}
278278
}
279279
{
280280
final value = k;
281281
if (value != null) {
282-
result['k'] = _base64UriEncode(value);
282+
result['k'] = base64UriEncode(value);
283283
}
284284
}
285285
{
@@ -303,25 +303,25 @@ class Jwk {
303303
{
304304
final value = n;
305305
if (value != null) {
306-
result['n'] = _base64UriEncode(value);
306+
result['n'] = base64UriEncode(value);
307307
}
308308
}
309309
{
310310
final value = p;
311311
if (value != null) {
312-
result['p'] = _base64UriEncode(value);
312+
result['p'] = base64UriEncode(value);
313313
}
314314
}
315315
{
316316
final value = q;
317317
if (value != null) {
318-
result['q'] = _base64UriEncode(value);
318+
result['q'] = base64UriEncode(value);
319319
}
320320
}
321321
{
322322
final value = qi;
323323
if (value != null) {
324-
result['qi'] = _base64UriEncode(value);
324+
result['qi'] = base64UriEncode(value);
325325
}
326326
}
327327
{
@@ -333,19 +333,19 @@ class Jwk {
333333
{
334334
final value = x;
335335
if (value != null) {
336-
result['x'] = _base64UriEncode(value);
336+
result['x'] = base64UriEncode(value);
337337
}
338338
}
339339
{
340340
final value = x5c;
341341
if (value != null) {
342-
result['x5c'] = _base64UriEncode(value);
342+
result['x5c'] = base64UriEncode(value);
343343
}
344344
}
345345
{
346346
final value = x5t;
347347
if (value != null) {
348-
result['x5t'] = _base64UriEncode(value);
348+
result['x5t'] = base64UriEncode(value);
349349
}
350350
}
351351
{
@@ -357,7 +357,7 @@ class Jwk {
357357
{
358358
final value = y;
359359
if (value != null) {
360-
result['y'] = _base64UriEncode(value);
360+
result['y'] = base64UriEncode(value);
361361
}
362362
}
363363
return result;
@@ -496,19 +496,19 @@ class Jwk {
496496
builder.crv = value as String;
497497
break;
498498
case 'd':
499-
builder.d = _base64UriDecode(value as String);
499+
builder.d = base64UriDecode(value as String);
500500
break;
501501
case 'dp':
502-
builder.dp = _base64UriDecode(value as String);
502+
builder.dp = base64UriDecode(value as String);
503503
break;
504504
case 'dq':
505-
builder.dq = _base64UriDecode(value as String);
505+
builder.dq = base64UriDecode(value as String);
506506
break;
507507
case 'e':
508-
builder.e = _base64UriDecode(value as String);
508+
builder.e = base64UriDecode(value as String);
509509
break;
510510
case 'k':
511-
builder.k = _base64UriDecode(value as String);
511+
builder.k = base64UriDecode(value as String);
512512
break;
513513
case 'key_ops':
514514
builder.keyOps = value as String;
@@ -520,34 +520,34 @@ class Jwk {
520520
builder.kty = value as String;
521521
break;
522522
case 'n':
523-
builder.n = _base64UriDecode(value as String);
523+
builder.n = base64UriDecode(value as String);
524524
break;
525525
case 'p':
526-
builder.p = _base64UriDecode(value as String);
526+
builder.p = base64UriDecode(value as String);
527527
break;
528528
case 'q':
529-
builder.q = _base64UriDecode(value as String);
529+
builder.q = base64UriDecode(value as String);
530530
break;
531531
case 'qi':
532-
builder.qi = _base64UriDecode(value as String);
532+
builder.qi = base64UriDecode(value as String);
533533
break;
534534
case 'use':
535535
builder.use = value as String;
536536
break;
537537
case 'x':
538-
builder.x = _base64UriDecode(value as String);
538+
builder.x = base64UriDecode(value as String);
539539
break;
540540
case 'x5c':
541-
builder.x5c = _base64UriDecode(value as String);
541+
builder.x5c = base64UriDecode(value as String);
542542
break;
543543
case 'x5t':
544-
builder.x5t = _base64UriDecode(value as String);
544+
builder.x5t = base64UriDecode(value as String);
545545
break;
546546
case 'x5u':
547547
builder.x5u = value as String;
548548
break;
549549
case 'y':
550-
builder.y = _base64UriDecode(value as String);
550+
builder.y = base64UriDecode(value as String);
551551
break;
552552
}
553553
}
@@ -676,12 +676,13 @@ class Jwk {
676676
return fromJson(json.decode(utf8.decode(bytes)) as Map);
677677
}
678678

679-
static List<int> _base64UriDecode(String s) {
680-
return const Base64Codec.urlSafe().decode(s);
679+
static List<int> base64UriDecode(String s) {
680+
return const Base64Codec.urlSafe()
681+
.decode(s + '=' * ((4 - s.length % 4) % 4));
681682
}
682683

683-
static String _base64UriEncode(List<int> bytes) {
684-
return const Base64Codec.urlSafe().encode(bytes);
684+
static String base64UriEncode(List<int> bytes) {
685+
return const Base64Codec.urlSafe().encode(bytes).split('=').first;
685686
}
686687
}
687688

jwk/test/jwk_test.dart

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
import 'dart:convert';
16-
1715
import 'package:jwk/jwk.dart';
1816
import 'package:test/test.dart';
1917

@@ -23,7 +21,7 @@ void main() {
2321
final json = <String, Object>{
2422
'kty': 'OCT',
2523
'alg': 'A128KW',
26-
'k': base64Url.encode([1, 2, 3]),
24+
'k': Jwk.base64UriEncode([1, 2, 3]),
2725
};
2826
final key = Jwk.fromJson(json);
2927
expect(key.kty, 'OCT');
@@ -38,7 +36,7 @@ void main() {
3836
final json = <String, Object>{
3937
'kty': 'OCT',
4038
'alg': 'C20',
41-
'k': base64Url.encode([1, 2, 3]),
39+
'k': Jwk.base64UriEncode([1, 2, 3]),
4240
};
4341
final key = Jwk.fromJson(json);
4442
expect(key.toJson(), json);
@@ -50,7 +48,7 @@ void main() {
5048
final json = <String, Object>{
5149
'kty': 'OCT',
5250
'alg': 'XC20',
53-
'x': base64Url.encode([1, 2, 3]),
51+
'x': Jwk.base64UriEncode([1, 2, 3]),
5452
};
5553
final key = Jwk.fromJson(json);
5654
expect(key.toJson(), json);
@@ -61,9 +59,9 @@ void main() {
6159
final json = <String, Object>{
6260
'kty': 'EC',
6361
'crv': 'P-256',
64-
'd': base64Url.encode([1]),
65-
'x': base64Url.encode([2]),
66-
'y': base64Url.encode([3]),
62+
'd': Jwk.base64UriEncode([1]),
63+
'x': Jwk.base64UriEncode([2]),
64+
'y': Jwk.base64UriEncode([3]),
6765
};
6866

6967
test('fromJson / toJson', () {
@@ -88,8 +86,8 @@ void main() {
8886
final json = <String, Object>{
8987
'crv': 'P-256',
9088
'kty': 'EC',
91-
'x': base64Url.encode([1]),
92-
'y': base64Url.encode([2]),
89+
'x': Jwk.base64UriEncode([1]),
90+
'y': Jwk.base64UriEncode([2]),
9391
};
9492

9593
test('fromJson / toJson', () {
@@ -111,15 +109,15 @@ void main() {
111109

112110
group('RSA private key', () {
113111
final json = <String, Object>{
114-
'd': base64Url.encode([1]),
115-
'dp': base64Url.encode([2]),
116-
'dq': base64Url.encode([3]),
117-
'e': base64Url.encode([4]),
112+
'd': Jwk.base64UriEncode([1]),
113+
'dp': Jwk.base64UriEncode([2]),
114+
'dq': Jwk.base64UriEncode([3]),
115+
'e': Jwk.base64UriEncode([4]),
118116
'kty': 'RSA',
119-
'n': base64Url.encode([5]),
120-
'p': base64Url.encode([6]),
121-
'q': base64Url.encode([7]),
122-
'qi': base64Url.encode([8]),
117+
'n': Jwk.base64UriEncode([5]),
118+
'p': Jwk.base64UriEncode([6]),
119+
'q': Jwk.base64UriEncode([7]),
120+
'qi': Jwk.base64UriEncode([8]),
123121
};
124122

125123
test('fromJson / toJson', () {
@@ -138,8 +136,8 @@ void main() {
138136
group('RSA public key', () {
139137
final json = <String, Object>{
140138
'kty': 'RSA',
141-
'n': base64Url.encode([1]),
142-
'e': base64Url.encode([2]),
139+
'n': Jwk.base64UriEncode([1]),
140+
'e': Jwk.base64UriEncode([2]),
143141
};
144142

145143
test('fromJson / toJson', () {

0 commit comments

Comments
 (0)