mirror of
https://github.com/jonasroussel/dart_jsonwebtoken.git
synced 2025-07-15 02:59:09 +08:00
adding brand new tests
This commit is contained in:
52
.github/workspaces/publish-ci.yml
vendored
Normal file
52
.github/workspaces/publish-ci.yml
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
name: Publish CI
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- "v[0-9]+.[0-9]+.[0-9]+*"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: dart-lang/setup-dart@v1
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: dart pub get
|
||||||
|
|
||||||
|
- name: Check formatting
|
||||||
|
run: dart format --output=none --set-exit-if-changed .
|
||||||
|
|
||||||
|
- name: Analyze code
|
||||||
|
run: dart analyze --fatal-infos
|
||||||
|
|
||||||
|
test:
|
||||||
|
needs: analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: dart-lang/setup-dart@v1
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: dart pub get
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: dart test -p chrome,vm --test-randomize-ordering-seed=random
|
||||||
|
|
||||||
|
publish:
|
||||||
|
needs: test
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
id-token: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: dart-lang/setup-dart@v1
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: dart pub get
|
||||||
|
|
||||||
|
- name: Publish - dry run
|
||||||
|
run: dart pub publish --dry-run
|
||||||
|
|
||||||
|
- name: Publish to pub.dev
|
||||||
|
run: dart pub publish -f
|
33
.github/workspaces/tests-ci.yml
vendored
Normal file
33
.github/workspaces/tests-ci.yml
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
name: Tests CI
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, synchronize]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: dart-lang/setup-dart@v1
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: dart pub get
|
||||||
|
|
||||||
|
- name: Check formatting
|
||||||
|
run: dart format --output=none --set-exit-if-changed .
|
||||||
|
|
||||||
|
- name: Analyze code
|
||||||
|
run: dart analyze --fatal-infos
|
||||||
|
|
||||||
|
test:
|
||||||
|
needs: analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: dart-lang/setup-dart@v1
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: dart pub get
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: dart test -p chrome,vm --test-randomize-ordering-seed=random
|
@ -12,46 +12,46 @@ import 'helpers.dart';
|
|||||||
|
|
||||||
abstract class JWTAlgorithm {
|
abstract class JWTAlgorithm {
|
||||||
/// HMAC using SHA-256 hash algorithm
|
/// HMAC using SHA-256 hash algorithm
|
||||||
static const HS256 = _HMACAlgorithm('HS256');
|
static const HS256 = HMACAlgorithm('HS256');
|
||||||
|
|
||||||
/// HMAC using SHA-384 hash algorithm
|
/// HMAC using SHA-384 hash algorithm
|
||||||
static const HS384 = _HMACAlgorithm('HS384');
|
static const HS384 = HMACAlgorithm('HS384');
|
||||||
|
|
||||||
/// HMAC using SHA-512 hash algorithm
|
/// HMAC using SHA-512 hash algorithm
|
||||||
static const HS512 = _HMACAlgorithm('HS512');
|
static const HS512 = HMACAlgorithm('HS512');
|
||||||
|
|
||||||
/// RSASSA-PSS using SHA-256 hash algorithm
|
/// RSASSA-PSS using SHA-256 hash algorithm
|
||||||
static const PS256 = _RSAAlgorithm('PS256');
|
static const PS256 = RSAAlgorithm('PS256', null);
|
||||||
|
|
||||||
/// RSASSA-PSS using SHA-384 hash algorithm
|
/// RSASSA-PSS using SHA-384 hash algorithm
|
||||||
static const PS384 = _RSAAlgorithm('PS384');
|
static const PS384 = RSAAlgorithm('PS384', null);
|
||||||
|
|
||||||
/// RSASSA-PSS using SHA-512 hash algorithm
|
/// RSASSA-PSS using SHA-512 hash algorithm
|
||||||
static const PS512 = _RSAAlgorithm('PS512');
|
static const PS512 = RSAAlgorithm('PS512', null);
|
||||||
|
|
||||||
/// RSASSA-PKCS1-v1_5 using SHA-256 hash algorithm
|
/// RSASSA-PKCS1-v1_5 using SHA-256 hash algorithm
|
||||||
static const RS256 = _RSAAlgorithm('RS256');
|
static const RS256 = RSAAlgorithm('RS256', null);
|
||||||
|
|
||||||
/// RSASSA-PKCS1-v1_5 using SHA-384 hash algorithm
|
/// RSASSA-PKCS1-v1_5 using SHA-384 hash algorithm
|
||||||
static const RS384 = _RSAAlgorithm('RS384');
|
static const RS384 = RSAAlgorithm('RS384', null);
|
||||||
|
|
||||||
/// RSASSA-PKCS1-v1_5 using SHA-512 hash algorithm
|
/// RSASSA-PKCS1-v1_5 using SHA-512 hash algorithm
|
||||||
static const RS512 = _RSAAlgorithm('RS512');
|
static const RS512 = RSAAlgorithm('RS512', null);
|
||||||
|
|
||||||
/// ECDSA using P-256 curve and SHA-256 hash algorithm
|
/// ECDSA using P-256 curve and SHA-256 hash algorithm
|
||||||
static const ES256 = _ECDSAAlgorithm('ES256');
|
static const ES256 = ECDSAAlgorithm('ES256');
|
||||||
|
|
||||||
/// ECDSA using P-384 curve and SHA-384 hash algorithm
|
/// ECDSA using P-384 curve and SHA-384 hash algorithm
|
||||||
static const ES384 = _ECDSAAlgorithm('ES384');
|
static const ES384 = ECDSAAlgorithm('ES384');
|
||||||
|
|
||||||
/// ECDSA using P-512 curve and SHA-512 hash algorithm
|
/// ECDSA using P-512 curve and SHA-512 hash algorithm
|
||||||
static const ES512 = _ECDSAAlgorithm('ES512');
|
static const ES512 = ECDSAAlgorithm('ES512');
|
||||||
|
|
||||||
/// ECDSA using secp256k1 curve and SHA-256 hash algorithm
|
/// ECDSA using secp256k1 curve and SHA-256 hash algorithm
|
||||||
static const ES256K = _ECDSAAlgorithm('ES256K');
|
static const ES256K = ECDSAAlgorithm('ES256K');
|
||||||
|
|
||||||
/// EdDSA using Ed25519 curve algorithm
|
/// EdDSA using Ed25519 curve algorithm
|
||||||
static const EdDSA = _EdDSAAlgorithm('EdDSA');
|
static const EdDSA = EdDSAAlgorithm('EdDSA');
|
||||||
|
|
||||||
/// Return the `JWTAlgorithm` from his string name
|
/// Return the `JWTAlgorithm` from his string name
|
||||||
static JWTAlgorithm fromName(String name) {
|
static JWTAlgorithm fromName(String name) {
|
||||||
@ -105,10 +105,10 @@ abstract class JWTAlgorithm {
|
|||||||
bool verify(JWTKey key, Uint8List body, Uint8List signature);
|
bool verify(JWTKey key, Uint8List body, Uint8List signature);
|
||||||
}
|
}
|
||||||
|
|
||||||
class _EdDSAAlgorithm extends JWTAlgorithm {
|
class EdDSAAlgorithm extends JWTAlgorithm {
|
||||||
final String _name;
|
final String _name;
|
||||||
|
|
||||||
const _EdDSAAlgorithm(this._name);
|
const EdDSAAlgorithm(this._name);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get name => _name;
|
String get name => _name;
|
||||||
@ -134,10 +134,10 @@ class _EdDSAAlgorithm extends JWTAlgorithm {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _HMACAlgorithm extends JWTAlgorithm {
|
class HMACAlgorithm extends JWTAlgorithm {
|
||||||
final String _name;
|
final String _name;
|
||||||
|
|
||||||
const _HMACAlgorithm(this._name);
|
const HMACAlgorithm(this._name);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get name => _name;
|
String get name => _name;
|
||||||
@ -181,10 +181,11 @@ class _HMACAlgorithm extends JWTAlgorithm {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _RSAAlgorithm extends JWTAlgorithm {
|
class RSAAlgorithm extends JWTAlgorithm {
|
||||||
final String _name;
|
final String _name;
|
||||||
|
final Random? _random;
|
||||||
|
|
||||||
const _RSAAlgorithm(this._name);
|
const RSAAlgorithm(this._name, this._random);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get name => _name;
|
String get name => _name;
|
||||||
@ -202,9 +203,10 @@ class _RSAAlgorithm extends JWTAlgorithm {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (algorithm == 'PSS') {
|
if (algorithm == 'PSS') {
|
||||||
final random = Random.secure();
|
final random = _random ?? Random.secure();
|
||||||
final salt =
|
final salt = Uint8List.fromList(
|
||||||
Uint8List.fromList(List.generate(32, (_) => random.nextInt(256)));
|
List.generate(32, (_) => random.nextInt(256)),
|
||||||
|
);
|
||||||
|
|
||||||
params = pc.ParametersWithSalt(
|
params = pc.ParametersWithSalt(
|
||||||
params,
|
params,
|
||||||
@ -294,10 +296,10 @@ class _RSAAlgorithm extends JWTAlgorithm {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ECDSAAlgorithm extends JWTAlgorithm {
|
class ECDSAAlgorithm extends JWTAlgorithm {
|
||||||
final String _name;
|
final String _name;
|
||||||
|
|
||||||
const _ECDSAAlgorithm(this._name);
|
const ECDSAAlgorithm(this._name);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get name => _name;
|
String get name => _name;
|
||||||
|
@ -9,6 +9,7 @@ environment:
|
|||||||
|
|
||||||
false_secrets:
|
false_secrets:
|
||||||
- /example/*.pem
|
- /example/*.pem
|
||||||
|
- /test/*
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
crypto: ^3.0.3
|
crypto: ^3.0.3
|
||||||
@ -19,3 +20,4 @@ dependencies:
|
|||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
lints: ^2.1.1
|
lints: ^2.1.1
|
||||||
|
test: ^1.24.6
|
||||||
|
227
test/sign_test.dart
Normal file
227
test/sign_test.dart
Normal file
@ -0,0 +1,227 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
import 'dart:math';
|
||||||
|
|
||||||
|
import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
final hsKey = SecretKey('secret passphrase');
|
||||||
|
final rsaKey = RSAPrivateKey('''-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC7VJTUt9Us8cKj
|
||||||
|
MzEfYyjiWA4R4/M2bS1GB4t7NXp98C3SC6dVMvDuictGeurT8jNbvJZHtCSuYEvu
|
||||||
|
NMoSfm76oqFvAp8Gy0iz5sxjZmSnXyCdPEovGhLa0VzMaQ8s+CLOyS56YyCFGeJZ
|
||||||
|
qgtzJ6GR3eqoYSW9b9UMvkBpZODSctWSNGj3P7jRFDO5VoTwCQAWbFnOjDfH5Ulg
|
||||||
|
p2PKSQnSJP3AJLQNFNe7br1XbrhV//eO+t51mIpGSDCUv3E0DDFcWDTH9cXDTTlR
|
||||||
|
ZVEiR2BwpZOOkE/Z0/BVnhZYL71oZV34bKfWjQIt6V/isSMahdsAASACp4ZTGtwi
|
||||||
|
VuNd9tybAgMBAAECggEBAKTmjaS6tkK8BlPXClTQ2vpz/N6uxDeS35mXpqasqskV
|
||||||
|
laAidgg/sWqpjXDbXr93otIMLlWsM+X0CqMDgSXKejLS2jx4GDjI1ZTXg++0AMJ8
|
||||||
|
sJ74pWzVDOfmCEQ/7wXs3+cbnXhKriO8Z036q92Qc1+N87SI38nkGa0ABH9CN83H
|
||||||
|
mQqt4fB7UdHzuIRe/me2PGhIq5ZBzj6h3BpoPGzEP+x3l9YmK8t/1cN0pqI+dQwY
|
||||||
|
dgfGjackLu/2qH80MCF7IyQaseZUOJyKrCLtSD/Iixv/hzDEUPfOCjFDgTpzf3cw
|
||||||
|
ta8+oE4wHCo1iI1/4TlPkwmXx4qSXtmw4aQPz7IDQvECgYEA8KNThCO2gsC2I9PQ
|
||||||
|
DM/8Cw0O983WCDY+oi+7JPiNAJwv5DYBqEZB1QYdj06YD16XlC/HAZMsMku1na2T
|
||||||
|
N0driwenQQWzoev3g2S7gRDoS/FCJSI3jJ+kjgtaA7Qmzlgk1TxODN+G1H91HW7t
|
||||||
|
0l7VnL27IWyYo2qRRK3jzxqUiPUCgYEAx0oQs2reBQGMVZnApD1jeq7n4MvNLcPv
|
||||||
|
t8b/eU9iUv6Y4Mj0Suo/AU8lYZXm8ubbqAlwz2VSVunD2tOplHyMUrtCtObAfVDU
|
||||||
|
AhCndKaA9gApgfb3xw1IKbuQ1u4IF1FJl3VtumfQn//LiH1B3rXhcdyo3/vIttEk
|
||||||
|
48RakUKClU8CgYEAzV7W3COOlDDcQd935DdtKBFRAPRPAlspQUnzMi5eSHMD/ISL
|
||||||
|
DY5IiQHbIH83D4bvXq0X7qQoSBSNP7Dvv3HYuqMhf0DaegrlBuJllFVVq9qPVRnK
|
||||||
|
xt1Il2HgxOBvbhOT+9in1BzA+YJ99UzC85O0Qz06A+CmtHEy4aZ2kj5hHjECgYEA
|
||||||
|
mNS4+A8Fkss8Js1RieK2LniBxMgmYml3pfVLKGnzmng7H2+cwPLhPIzIuwytXywh
|
||||||
|
2bzbsYEfYx3EoEVgMEpPhoarQnYPukrJO4gwE2o5Te6T5mJSZGlQJQj9q4ZB2Dfz
|
||||||
|
et6INsK0oG8XVGXSpQvQh3RUYekCZQkBBFcpqWpbIEsCgYAnM3DQf3FJoSnXaMhr
|
||||||
|
VBIovic5l0xFkEHskAjFTevO86Fsz1C2aSeRKSqGFoOQ0tmJzBEs1R6KqnHInicD
|
||||||
|
TQrKhArgLXX4v3CddjfTRJkFWDbE/CkvKZNOrcf1nhaGCPspRJj2KUkj1Fhl9Cnc
|
||||||
|
dn/RsYEONbwQSjIfMPkvxF+8HQ==
|
||||||
|
-----END PRIVATE KEY-----''');
|
||||||
|
final ecKey = ECPrivateKey('''-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgevZzL1gdAFr88hb2
|
||||||
|
OF/2NxApJCzGCEDdfSp6VQO30hyhRANCAAQRWz+jn65BtOMvdyHKcvjBeBSDZH2r
|
||||||
|
1RTwjmYSi9R/zpBnuQ4EiMnCqfMPWiZqB4QdbAd0E7oH50VpuZ1P087G
|
||||||
|
-----END PRIVATE KEY-----''');
|
||||||
|
final secp256kKey = ECPrivateKey('''-----BEGIN EC PRIVATE KEY-----
|
||||||
|
MHQCAQEEINCRiJnNDnzfo2So2tWY4AIuzeC2ZBp/hmMDcZz3Fh45oAcGBSuBBAAK
|
||||||
|
oUQDQgAE0aELkvG/Xeo5y6o0WXRAjlediLptGz7Q8zjDmpGFXkKBYZ6IiL7JJ2Tk
|
||||||
|
cHzd83bmeUeGX33RGTYFPXs5t/VBnw==
|
||||||
|
-----END EC PRIVATE KEY-----''');
|
||||||
|
final edKey = EdDSAPrivateKey(
|
||||||
|
base64Decode(
|
||||||
|
'nWGxne/9WmC6hEr0kuwsxERJxWl7MmkZcDusAxyuf2DXWpgBgrEKt9VL/' +
|
||||||
|
'tPJZAc6DuFy89qmIyWvAhpo9wdRGg==',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
class MockRSAAlgorithm extends RSAAlgorithm {
|
||||||
|
MockRSAAlgorithm(String name) : super(name, Random(42));
|
||||||
|
}
|
||||||
|
|
||||||
|
String sign(JWTKey key, JWTAlgorithm algorithm) {
|
||||||
|
final jwt = JWT({'foo': 'bar'});
|
||||||
|
|
||||||
|
final token = jwt.sign(
|
||||||
|
key,
|
||||||
|
algorithm: algorithm,
|
||||||
|
noIssueAt: true,
|
||||||
|
);
|
||||||
|
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
group('Signing a JWT', () {
|
||||||
|
//------//
|
||||||
|
// HMAC //
|
||||||
|
//------//
|
||||||
|
group('HMAC', () {
|
||||||
|
test('.sign HS256', () {
|
||||||
|
final token = sign(hsKey, JWTAlgorithm.HS256);
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.NGVtp-VylRDt194QX0dDtpO6npY0je5nJvmF5w9MsS4';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
test('.sign HS384', () {
|
||||||
|
final token = sign(hsKey, JWTAlgorithm.HS384);
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJIUzM4NCIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.DGsoLHrTRkgC-57QAcDQOyg1EcgonMG2x_zb1GsPR3hBfGxedHzd82erWkGpq7LZ';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
test('.sign HS512', () {
|
||||||
|
final token = sign(hsKey, JWTAlgorithm.HS512);
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.yMDFowJXjwLXdUm5wTgBSP9nrc4SPCNlYghqjPZdVSYLE112S8S_xIuA3ISTykaCg1kIs2LED0I0lCRMRdqH4g';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//-------------------//
|
||||||
|
// RSASSA-PKCS1-v1_5 //
|
||||||
|
//-------------------//
|
||||||
|
group('RSASSA-PKCS1-v1_5', () {
|
||||||
|
test('.sign RS256', () {
|
||||||
|
final token = sign(rsaKey, JWTAlgorithm.RS256);
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.YHSMCF3EegI4GLg46jfD7HBEbqq7qgQ-wOlAnepxxe7Mewtrw3hvfM4bxAi70UqzNdCl3tIqvlATlTyG7VZf9tjb1PG9TGyEaqz87rJktsq0hUbZxKRZgbADHxKjUk_QVuwF39XYv4_ENYVUNDXU5nQJ_d1W2JW-1SzI3cwn_qRqyryyL_x6TOQbtbWdxusJBL-uJmE2XZMqGJah3ZrWICh_ehswwDfZXCifUfHYOnLlzoDuqzeYyoi1y_l83wIBaopF2lbopgjAdZGzrP2kUsDm2RlcGNAlGKGoV3W7rGuosGNsBDHkHYuIFwoPti77bcbticv2nBn1ksGmxvYxiw';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
test('.sign RS384', () {
|
||||||
|
final token = sign(rsaKey, JWTAlgorithm.RS384);
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJSUzM4NCIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.JdaVcZhrmwThENssjjFxL8nTovqCmAmDKl81jU1pBpKRShokN_KPasMhxrwgKQQVubQP3a_GV8JMdz_VRikoMm_iFhj8OUXIt74eZhuZXD6CaZrRrHCBWNX0FfT0OnwjtkNiHsza2dne8WZ4nf1M1g9vOZ4JF2cQ7DfwX6SPuV_nhzkuBcYAifjNYUbFUeKQFRVhoXAnrvvBFT2wCa5pa1QrFpsZbPEsOclCAIwLUx7sbA7V8jZWLDXQm0rlsTUEDAG0g8PQArXf8MiKmOFkoxNPMgmgdt0H6Ju1KqYdmgsTJ87TadLBQ7PVCTm6GfCtSSZBMHfWmvectVWYGRjiHQ';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
test('.sign RS512', () {
|
||||||
|
final token = sign(rsaKey, JWTAlgorithm.RS512);
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.pIqXt4HVhvjNS-6mPEz9mR7pr8V-w1u-x1jMN7Tie-eqLUEcYA6I-3SeSHfCfEDhM4ssp7wpPZ4CoFJV3m_hQR-sugBbZ6CvSNlGT7U2DXBvmTyHSU-eckM7y4fxWGsa8-PIm1MZHKvIUCD5vYcXKgt0mz_57OOXikcT-sgbUDYB0HU0Gii_klO7QNUV7Wykyu1HK6wg9nQJXJ8rzFhPMGR3Nqo-D9UIhayl714Tm-ZqdAWRD1YMsK6zJz5ajQu1_NZ11j4ACAVF2BuzSSfT2Cuw1zMcE_7xce1nSt1sHho__SBobsUPvO_Izp12ppz--zcAC6dPS1_4W8GxuiodEQ';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//-------//
|
||||||
|
// ECDSA //
|
||||||
|
//-------//
|
||||||
|
group('ECDSA', () {
|
||||||
|
test('.sign ES256', () {
|
||||||
|
final token = sign(ecKey, JWTAlgorithm.ES256);
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.mUJVRsRm7VXpxNHfVWdU43BJtuV8MKDcNMSr9agp_-M4FsamUibn04y8PgNzQizdw9BWTwkjQcpm1Go1LHPMyg';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
test('.sign ES256K', () {
|
||||||
|
final token = sign(secp256kKey, JWTAlgorithm.ES256K);
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJFUzI1NksiLCJ0eXAiOiJKV1QifQ' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.ZuwDjYNGu7PLS_knFAASC_J4t4tcmv6PHV7Pm_QJImqoCs0K96WFVCDchW4gy6AFE4ANAGTOGgfPcQFulNDAFQ';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
test('.sign ES384', () {
|
||||||
|
final token = sign(ecKey, JWTAlgorithm.ES384);
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJFUzM4NCIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.c0CieEtA25lXmmX3VLeBy0ir8Gv41QGHiwwfHCfzied3v3Ur3DOP0PVjvBkSXQy82iYAWBfjDBj44ZBpwqE4DA';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
test('.sign ES512', () {
|
||||||
|
final token = sign(ecKey, JWTAlgorithm.ES512);
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.WwnWqtru-JEM1fvkYFEgm5946iSk1esdZuBNbQAbfdg6FURD-3J6HEEoLlIQQ8oh8LfdyDR8KSAVt83WLHUFqg';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//------------//
|
||||||
|
// RSASSA-PSS //
|
||||||
|
//------------//
|
||||||
|
group('RSASSA-PSS', () {
|
||||||
|
test('.sign PS256', () {
|
||||||
|
final token = sign(rsaKey, MockRSAAlgorithm('PS256'));
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.JYyEew2G-Bb6p8L7BCfZ79o-42HlMynq7zS_Rc_3q3M2CjvaEY1F_ratOPlveR8wqTAN6swxVfx48ZdRnV282EckX9JOel_MjQH87Iutauj-v6D90xLW2IZt-T2gOkqIo2AQ2i1PeM47jCwbawwuYyy_G433-Rw3tP2j6neNV9tTIAjQicaDVxeqKcvF3l1YjsSLqrLGB4rHLZcCv47CURpO9ZB7WgmOvP_vqKJB_Pcoo6iMI0EIW6REYFIXF1Wxs8Xg9Schyb6p1WjRD4fGPDW9m_uqoaOw9TfAh4GKeWYXE5sw1EZH2l5grStK3_dA0bLeLCOKZkZJZm-TD_cyRw';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
test('.sign PS384', () {
|
||||||
|
final token = sign(rsaKey, MockRSAAlgorithm('PS384'));
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJQUzM4NCIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.KVuzcv9rBYCcQMPPjis1sAuYy4jSrustwT-gRqx1P0P1Q43ku-f3tXcFluYUJO6r6gVzV_OmsffxSGgk7QEc8SFqoAWO25QaGYAKqjqeKUL-57d8NQSFLSEdJhrNZ1z6jQoTmkVxgKi5EqDV0DbAt4d6yBd8I2QFLS9G1QNa3XtziwJezrVS-Z6ccIesoZwzczebiHnEmG8DPDcv5Y8Jb_nnmY2w8AQ_wVU1AkiUkTEZ1lDzYB_YUxCzUzSmqrLHIAHsUoV5lt3-hzOJl9Mp5f4ik0QtqQ76NaUZoXrVnTaMpES1bHwpGZcJQEu3igzm6RjI8-kkfcpUsG4Nwsx4TQ';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
test('.sign PS512', () {
|
||||||
|
final token = sign(rsaKey, MockRSAAlgorithm('PS512'));
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJQUzUxMiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.Pfgxx9l4863v2pEs4uZgR6WJ9HHu0hPO9I6JkiSSJ8idsl9hpW6iuHmVvRskvbqVxKcZi1EQZ_9p-JDRB5JZCVn73BRencZiV_MDc0pDwOqd8Y7RmYiG_V_yfE_djJIpk9vEcpSJuC3Ow6uesNthcyG1CRU41f_qbUaNdg4AYucpvVxEKVzwss94Iq4bqIFy56pKl6HfwZZx1ShlefrbIPVpZgE4TPGwoR2GxMc0zuMAea3skHhRC02TZNiFZJ6zqBUolNrWxIoXNFyeLnjZgi6IHJ0jClym54HT8r_hOnf6j5J8M0j7xUmUZD7WDSdLw0pJU8VsCBtgec5Bk9HQiQ';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//-------//
|
||||||
|
// EdDSA //
|
||||||
|
//-------//
|
||||||
|
group('EdDSA', () {
|
||||||
|
test('.sign EdDSA', () {
|
||||||
|
final token = sign(edKey, JWTAlgorithm.EdDSA);
|
||||||
|
|
||||||
|
final expectedToken = 'eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.8tRIxs_o_isQItc2FtzA34Ah-EEvBj7Fw6lKh2tD53IOx5CinBM36yIGo2TDHNmm-ElATCdnMisUKt_UJ5pTAg';
|
||||||
|
|
||||||
|
expect(token, equals(expectedToken));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
200
test/verify_test.dart
Normal file
200
test/verify_test.dart
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
final hsKey = SecretKey('secret passphrase');
|
||||||
|
final rsaKey = RSAPublicKey('''-----BEGIN PUBLIC KEY-----
|
||||||
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1SU1LfVLPHCozMxH2Mo
|
||||||
|
4lgOEePzNm0tRgeLezV6ffAt0gunVTLw7onLRnrq0/IzW7yWR7QkrmBL7jTKEn5u
|
||||||
|
+qKhbwKfBstIs+bMY2Zkp18gnTxKLxoS2tFczGkPLPgizskuemMghRniWaoLcyeh
|
||||||
|
kd3qqGElvW/VDL5AaWTg0nLVkjRo9z+40RQzuVaE8AkAFmxZzow3x+VJYKdjykkJ
|
||||||
|
0iT9wCS0DRTXu269V264Vf/3jvredZiKRkgwlL9xNAwxXFg0x/XFw005UWVRIkdg
|
||||||
|
cKWTjpBP2dPwVZ4WWC+9aGVd+Gyn1o0CLelf4rEjGoXbAAEgAqeGUxrcIlbjXfbc
|
||||||
|
mwIDAQAB
|
||||||
|
-----END PUBLIC KEY-----''');
|
||||||
|
final ecKey = ECPublicKey('''-----BEGIN PUBLIC KEY-----
|
||||||
|
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEVs/o5+uQbTjL3chynL4wXgUg2R9
|
||||||
|
q9UU8I5mEovUf86QZ7kOBIjJwqnzD1omageEHWwHdBO6B+dFabmdT9POxg==
|
||||||
|
-----END PUBLIC KEY-----''');
|
||||||
|
final secp256kKey = ECPublicKey('''-----BEGIN PUBLIC KEY-----
|
||||||
|
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE0aELkvG/Xeo5y6o0WXRAjlediLptGz7Q
|
||||||
|
8zjDmpGFXkKBYZ6IiL7JJ2TkcHzd83bmeUeGX33RGTYFPXs5t/VBnw==
|
||||||
|
-----END PUBLIC KEY-----''');
|
||||||
|
final edKey = EdDSAPublicKey(
|
||||||
|
base64Decode('11qYAYKxCrfVS/7TyWQHOg7hcvPapiMlrwIaaPcHURo='),
|
||||||
|
);
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
group('Verify a JWT', () {
|
||||||
|
//------//
|
||||||
|
// HMAC //
|
||||||
|
//------//
|
||||||
|
group('HMAC', () {
|
||||||
|
test('.verify HS256', () {
|
||||||
|
final token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.NGVtp-VylRDt194QX0dDtpO6npY0je5nJvmF5w9MsS4';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, hsKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
test('.verify HS384', () {
|
||||||
|
final token = 'eyJhbGciOiJIUzM4NCIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.DGsoLHrTRkgC-57QAcDQOyg1EcgonMG2x_zb1GsPR3hBfGxedHzd82erWkGpq7LZ';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, hsKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
test('.verify HS512', () {
|
||||||
|
final token = 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.yMDFowJXjwLXdUm5wTgBSP9nrc4SPCNlYghqjPZdVSYLE112S8S_xIuA3ISTykaCg1kIs2LED0I0lCRMRdqH4g';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, hsKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//-------------------//
|
||||||
|
// RSASSA-PKCS1-v1_5 //
|
||||||
|
//-------------------//
|
||||||
|
group('RSASSA-PKCS1-v1_5', () {
|
||||||
|
test('.verify RS256', () {
|
||||||
|
final token = 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.YHSMCF3EegI4GLg46jfD7HBEbqq7qgQ-wOlAnepxxe7Mewtrw3hvfM4bxAi70UqzNdCl3tIqvlATlTyG7VZf9tjb1PG9TGyEaqz87rJktsq0hUbZxKRZgbADHxKjUk_QVuwF39XYv4_ENYVUNDXU5nQJ_d1W2JW-1SzI3cwn_qRqyryyL_x6TOQbtbWdxusJBL-uJmE2XZMqGJah3ZrWICh_ehswwDfZXCifUfHYOnLlzoDuqzeYyoi1y_l83wIBaopF2lbopgjAdZGzrP2kUsDm2RlcGNAlGKGoV3W7rGuosGNsBDHkHYuIFwoPti77bcbticv2nBn1ksGmxvYxiw';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, rsaKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
test('.verify RS384', () {
|
||||||
|
final token = 'eyJhbGciOiJSUzM4NCIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.JdaVcZhrmwThENssjjFxL8nTovqCmAmDKl81jU1pBpKRShokN_KPasMhxrwgKQQVubQP3a_GV8JMdz_VRikoMm_iFhj8OUXIt74eZhuZXD6CaZrRrHCBWNX0FfT0OnwjtkNiHsza2dne8WZ4nf1M1g9vOZ4JF2cQ7DfwX6SPuV_nhzkuBcYAifjNYUbFUeKQFRVhoXAnrvvBFT2wCa5pa1QrFpsZbPEsOclCAIwLUx7sbA7V8jZWLDXQm0rlsTUEDAG0g8PQArXf8MiKmOFkoxNPMgmgdt0H6Ju1KqYdmgsTJ87TadLBQ7PVCTm6GfCtSSZBMHfWmvectVWYGRjiHQ';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, rsaKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
test('.verify RS512', () {
|
||||||
|
final token = 'eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.pIqXt4HVhvjNS-6mPEz9mR7pr8V-w1u-x1jMN7Tie-eqLUEcYA6I-3SeSHfCfEDhM4ssp7wpPZ4CoFJV3m_hQR-sugBbZ6CvSNlGT7U2DXBvmTyHSU-eckM7y4fxWGsa8-PIm1MZHKvIUCD5vYcXKgt0mz_57OOXikcT-sgbUDYB0HU0Gii_klO7QNUV7Wykyu1HK6wg9nQJXJ8rzFhPMGR3Nqo-D9UIhayl714Tm-ZqdAWRD1YMsK6zJz5ajQu1_NZ11j4ACAVF2BuzSSfT2Cuw1zMcE_7xce1nSt1sHho__SBobsUPvO_Izp12ppz--zcAC6dPS1_4W8GxuiodEQ';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, rsaKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//-------//
|
||||||
|
// ECDSA //
|
||||||
|
//-------//
|
||||||
|
group('ECDSA', () {
|
||||||
|
test('.verify ES256', () {
|
||||||
|
final token = 'eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.mUJVRsRm7VXpxNHfVWdU43BJtuV8MKDcNMSr9agp_-M4FsamUibn04y8PgNzQizdw9BWTwkjQcpm1Go1LHPMyg';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, ecKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
test('.verify ES256K', () {
|
||||||
|
final token = 'eyJhbGciOiJFUzI1NksiLCJ0eXAiOiJKV1QifQ' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.ZuwDjYNGu7PLS_knFAASC_J4t4tcmv6PHV7Pm_QJImqoCs0K96WFVCDchW4gy6AFE4ANAGTOGgfPcQFulNDAFQ';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, secp256kKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
test('.verify ES384', () {
|
||||||
|
final token = 'eyJhbGciOiJFUzM4NCIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.c0CieEtA25lXmmX3VLeBy0ir8Gv41QGHiwwfHCfzied3v3Ur3DOP0PVjvBkSXQy82iYAWBfjDBj44ZBpwqE4DA';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, ecKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
test('.verify ES512', () {
|
||||||
|
final token = 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.WwnWqtru-JEM1fvkYFEgm5946iSk1esdZuBNbQAbfdg6FURD-3J6HEEoLlIQQ8oh8LfdyDR8KSAVt83WLHUFqg';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, ecKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//------------//
|
||||||
|
// RSASSA-PSS //
|
||||||
|
//------------//
|
||||||
|
group('RSASSA-PSS', () {
|
||||||
|
test('.verify PS256', () {
|
||||||
|
final token = 'eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.JYyEew2G-Bb6p8L7BCfZ79o-42HlMynq7zS_Rc_3q3M2CjvaEY1F_ratOPlveR8wqTAN6swxVfx48ZdRnV282EckX9JOel_MjQH87Iutauj-v6D90xLW2IZt-T2gOkqIo2AQ2i1PeM47jCwbawwuYyy_G433-Rw3tP2j6neNV9tTIAjQicaDVxeqKcvF3l1YjsSLqrLGB4rHLZcCv47CURpO9ZB7WgmOvP_vqKJB_Pcoo6iMI0EIW6REYFIXF1Wxs8Xg9Schyb6p1WjRD4fGPDW9m_uqoaOw9TfAh4GKeWYXE5sw1EZH2l5grStK3_dA0bLeLCOKZkZJZm-TD_cyRw';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, rsaKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
test('.verify PS384', () {
|
||||||
|
final token = 'eyJhbGciOiJQUzM4NCIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.KVuzcv9rBYCcQMPPjis1sAuYy4jSrustwT-gRqx1P0P1Q43ku-f3tXcFluYUJO6r6gVzV_OmsffxSGgk7QEc8SFqoAWO25QaGYAKqjqeKUL-57d8NQSFLSEdJhrNZ1z6jQoTmkVxgKi5EqDV0DbAt4d6yBd8I2QFLS9G1QNa3XtziwJezrVS-Z6ccIesoZwzczebiHnEmG8DPDcv5Y8Jb_nnmY2w8AQ_wVU1AkiUkTEZ1lDzYB_YUxCzUzSmqrLHIAHsUoV5lt3-hzOJl9Mp5f4ik0QtqQ76NaUZoXrVnTaMpES1bHwpGZcJQEu3igzm6RjI8-kkfcpUsG4Nwsx4TQ';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, rsaKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
test('.verify PS512', () {
|
||||||
|
final token = 'eyJhbGciOiJQUzUxMiIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.Pfgxx9l4863v2pEs4uZgR6WJ9HHu0hPO9I6JkiSSJ8idsl9hpW6iuHmVvRskvbqVxKcZi1EQZ_9p-JDRB5JZCVn73BRencZiV_MDc0pDwOqd8Y7RmYiG_V_yfE_djJIpk9vEcpSJuC3Ow6uesNthcyG1CRU41f_qbUaNdg4AYucpvVxEKVzwss94Iq4bqIFy56pKl6HfwZZx1ShlefrbIPVpZgE4TPGwoR2GxMc0zuMAea3skHhRC02TZNiFZJ6zqBUolNrWxIoXNFyeLnjZgi6IHJ0jClym54HT8r_hOnf6j5J8M0j7xUmUZD7WDSdLw0pJU8VsCBtgec5Bk9HQiQ';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, rsaKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
//-------//
|
||||||
|
// EdDSA //
|
||||||
|
//-------//
|
||||||
|
group('EdDSA', () {
|
||||||
|
test('.verify EdDSA', () {
|
||||||
|
final token = 'eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9' +
|
||||||
|
'.eyJmb28iOiJiYXIifQ' +
|
||||||
|
'.8tRIxs_o_isQItc2FtzA34Ah-EEvBj7Fw6lKh2tD53IOx5CinBM36yIGo2TDHNmm-ElATCdnMisUKt_UJ5pTAg';
|
||||||
|
|
||||||
|
final jwt = JWT.tryVerify(token, edKey);
|
||||||
|
|
||||||
|
expect(jwt, isNotNull);
|
||||||
|
expect(jwt?.payload, equals({'foo': 'bar'}));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
Reference in New Issue
Block a user