mirror of
https://github.com/jonasroussel/dart_jsonwebtoken.git
synced 2025-08-23 04:11:00 +08:00
v2.9.0
This commit is contained in:
@ -1,3 +1,8 @@
|
||||
## 2.9.0
|
||||
|
||||
- Adding `basic_utils` package to handle PEM & key parsing
|
||||
- A lot of new class factory to create `Keys` (e.g. `RSAPublicKey.cert` and `.bytes`)
|
||||
|
||||
## 2.8.2
|
||||
|
||||
- Downgraing `collection` to 1.7.1 to be compatible with flutter_test
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,8 +1,11 @@
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:basic_utils/basic_utils.dart';
|
||||
import 'package:dart_jsonwebtoken/src/utils.dart';
|
||||
import 'package:ed25519_edwards/ed25519_edwards.dart' as ed;
|
||||
import 'package:pointycastle/pointycastle.dart' as pc;
|
||||
|
||||
import 'package:ed25519_edwards/ed25519_edwards.dart' as ed;
|
||||
import 'exceptions.dart';
|
||||
import 'crypto_utils.dart';
|
||||
|
||||
abstract class JWTKey {}
|
||||
|
||||
@ -27,6 +30,8 @@ class RSAPrivateKey extends JWTKey {
|
||||
|
||||
RSAPrivateKey.raw(pc.RSAPrivateKey _key) : key = _key;
|
||||
RSAPrivateKey.clone(RSAPrivateKey _key) : key = _key.key;
|
||||
RSAPrivateKey.bytes(Uint8List bytes)
|
||||
: key = CryptoUtils.rsaPrivateKeyFromDERBytes(bytes);
|
||||
}
|
||||
|
||||
/// For RSA algorithm, in verify method
|
||||
@ -43,6 +48,26 @@ class RSAPublicKey extends JWTKey {
|
||||
|
||||
RSAPublicKey.raw(pc.RSAPublicKey _key) : key = _key;
|
||||
RSAPublicKey.clone(RSAPublicKey _key) : key = _key.key;
|
||||
RSAPublicKey.bytes(Uint8List bytes) {
|
||||
try {
|
||||
key = CryptoUtils.rsaPublicKeyFromDERBytesPkcs1(bytes);
|
||||
} catch (_) {
|
||||
key = CryptoUtils.rsaPublicKeyFromDERBytes(bytes);
|
||||
}
|
||||
}
|
||||
RSAPublicKey.cert(String pem) {
|
||||
final x509 = X509Utils.x509CertificateFromPem(pem);
|
||||
final bytes = x509.tbsCertificate?.subjectPublicKeyInfo.bytes;
|
||||
if (bytes == null) {
|
||||
throw JWTParseException('x509 Certificate parsing failed');
|
||||
}
|
||||
|
||||
try {
|
||||
key = CryptoUtils.rsaPublicKeyFromDERBytesPkcs1(hexToUint8List(bytes));
|
||||
} catch (_) {
|
||||
key = CryptoUtils.rsaPublicKeyFromDERBytes(hexToUint8List(bytes));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// For ECDSA algorithm, in sign method
|
||||
@ -75,6 +100,8 @@ class ECPrivateKey extends JWTKey {
|
||||
ECPrivateKey.clone(ECPrivateKey _key)
|
||||
: key = _key.key,
|
||||
size = _key.size;
|
||||
ECPrivateKey.bytes(Uint8List bytes)
|
||||
: key = CryptoUtils.ecPrivateKeyFromDerBytes(bytes);
|
||||
}
|
||||
|
||||
/// For ECDSA algorithm, in verify method
|
||||
@ -87,6 +114,8 @@ class ECPublicKey extends JWTKey {
|
||||
|
||||
ECPublicKey.raw(pc.ECPublicKey _key) : key = _key;
|
||||
ECPublicKey.clone(ECPublicKey _key) : key = _key.key;
|
||||
ECPublicKey.bytes(Uint8List bytes)
|
||||
: key = CryptoUtils.ecPublicKeyFromDerBytes(bytes);
|
||||
}
|
||||
|
||||
/// For EdDSA algorithm, in sign method
|
||||
|
@ -89,3 +89,19 @@ BigInt bigIntFromBytes(Uint8List bytes) {
|
||||
|
||||
return bytes.fold(BigInt.zero, (a, b) => a * _b256 + BigInt.from(b));
|
||||
}
|
||||
|
||||
Uint8List hexToUint8List(String hex) {
|
||||
if (hex.length % 2 != 0) {
|
||||
throw 'Odd number of hex digits';
|
||||
}
|
||||
var l = hex.length ~/ 2;
|
||||
var result = Uint8List(l);
|
||||
for (var i = 0; i < l; ++i) {
|
||||
var x = int.parse(hex.substring(2 * i, 2 * (i + 1)), radix: 16);
|
||||
if (x.isNaN) {
|
||||
throw 'Expected hex string';
|
||||
}
|
||||
result[i] = x;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
name: dart_jsonwebtoken
|
||||
description: A dart implementation of the famous javascript library 'jsonwebtoken' (JWT).
|
||||
version: 2.8.2
|
||||
version: 2.9.0
|
||||
repository: https://github.com/jonasroussel/dart_jsonwebtoken
|
||||
homepage: https://github.com/jonasroussel/dart_jsonwebtoken#readme
|
||||
|
||||
@ -19,6 +19,7 @@ dependencies:
|
||||
convert: ^3.1.1
|
||||
collection: ^1.17.1
|
||||
ed25519_edwards: ^0.3.1
|
||||
basic_utils: ^5.6.1
|
||||
|
||||
dev_dependencies:
|
||||
lints: ^2.1.1
|
||||
|
Reference in New Issue
Block a user