Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/src/impl_ffi/impl_ffi.rsa_common.dart
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ _EvpPKey _importJwkRsaPrivateOrPublicKey(
checkJwk(jwk.d != null, 'd');
final d = readBN(jwk.d!, 'd');
// If present properties p,q,dp,dq,qi enable optional optimizations, see:
// https://tools.ietf.org/html/rfc7518#section-6.3.2
// https://https://www.rfc-editor.org/rfc/rfc7518#section-6.3.2
// However, these are required by Chromes Web Crypto implementation:
// https://chromium.googlesource.com/chromium/src/+/43d62c50b705f88c67b14539e91fd8fd017f70c4/components/webcrypto/algorithms/rsa.cc#82
// They are also required by Web Crypto implementation in Firefox:
Expand Down Expand Up @@ -202,7 +202,7 @@ Map<String, dynamic> _exportJwkRsaPrivateOrPublicKey(
ssl.RSA_get0_key(rsa, ffi.nullptr, ffi.nullptr, d);

// p, q, dp, dq, qi is optional in:
// // https://tools.ietf.org/html/rfc7518#section-6.3.2
// // https://www.rfc-editor.org/rfc/rfc7518#section-6.3.2
// but explicitly required when exporting in Web Crypto.
final p = scope<ffi.Pointer<BIGNUM>>();
final q = scope<ffi.Pointer<BIGNUM>>();
Expand Down
4 changes: 2 additions & 2 deletions lib/src/impl_ffi/impl_ffi.utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,7 @@ int _numBitsToBytes(int numberOfBits) =>
(numberOfBits ~/ 8) + ((7 + (numberOfBits % 8)) ~/ 8);

/// Decode url-safe base64 witout padding as specified in
/// [RFC 7515 Section 2](https://tools.ietf.org/html/rfc7515#section-2)
/// [RFC 7515 Section 2]( https://www.rfc-editor.org/rfc/rfc7515#section-2)
///
/// Throw [FormatException] mentioning JWK property [prop] on failure.
Uint8List _jwkDecodeBase64UrlNoPadding(String unpadded, String prop) {
Expand All @@ -508,7 +508,7 @@ Uint8List _jwkDecodeBase64UrlNoPadding(String unpadded, String prop) {
}

/// Encode url-safe base64 witout padding as specified in
/// [RFC 7515 Section 2](https://tools.ietf.org/html/rfc7515#section-2)
/// [RFC 7515 Section 2](https://www.rfc-editor.org/rfc/rfc7515#section-2)
String _jwkEncodeBase64UrlNoPadding(List<int> data) {
final padded = base64Url.encode(data);
final i = padded.indexOf('=');
Expand Down
2 changes: 1 addition & 1 deletion lib/src/jsonwebkey.dart
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ final class JsonWebKey {
/// See also "oth" in [RFC 7518 Section 6.3.2.7].
///
/// [1]: https://www.w3.org/TR/WebCryptoAPI/#JsonWebKey-dictionary
/// [2]: https://tools.ietf.org/html/rfc7518#section-6.3.2.7
/// [2]: https://www.rfc-editor.org/rfc/rfc7518#section-6.3.2.7
final class RsaOtherPrimesInfo {
String r;
String d;
Expand Down
2 changes: 1 addition & 1 deletion lib/src/testing/webcrypto/rsapss.dart
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ final _testData = [
/// [2]: https://opensource.apple.com/source/CommonCrypto/CommonCrypto-60165.120.1/lib/CommonRSACryptor.c.auto.html
/// [3]: https://opensource.apple.com/source/xnu/xnu-4570.41.2/EXTERNAL_HEADERS/corecrypto/ccrsa.h.auto.html
/// [4]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf
/// [5]: https://tools.ietf.org/html/rfc3447
/// [5]: https://www.rfc-editor.org/rfc/rfc3447
/// [6]: https://tools.ietf.org/html/rfc3447#section-9.1
/// [7]: https://bugs.webkit.org/show_bug.cgi?id=216750
...(nullOnSafari(_testDataWithLongSaltLength) ?? <Map>[]),
Expand Down
12 changes: 6 additions & 6 deletions lib/src/webcrypto/webcrypto.aescbc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ part of 'webcrypto.dart';
/// {@macro AesCbcSecretKey-encryptBytes/decryptBytes:example}
///
/// [1]: https://csrc.nist.gov/publications/detail/sp/800-38a/final
/// [2]: https://tools.ietf.org/html/rfc2315#section-10.3
/// [3]: https://tools.ietf.org/html/rfc7517
/// [2]: https://www.rfc-editor.org/rfc/rfc2315#section-10.3
/// [3]: https://www.rfc-editor.org/rfc/rfc7517
final class AesCbcSecretKey {
final AesCbcSecretKeyImpl _impl;

Expand Down Expand Up @@ -106,7 +106,7 @@ final class AesCbcSecretKey {
/// print(jsonEncode(keyData));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc7517
/// [1]:https://www.rfc-editor.org/rfc/rfc7517
// TODO: Decide if we want restrictions on "use" property" (we probably have it on web, if we don't strip it)
// TODO: Decide if we want place restrictions on key_ops
static Future<AesCbcSecretKey> importJsonWebKey(
Expand Down Expand Up @@ -150,7 +150,7 @@ final class AesCbcSecretKey {
///
/// {@template AesCbcSecretKey-encrypt:padding}
/// Encrypted output is always padded in PKCS#7 mode, as described in
/// [RFC 2315 Section 10.3 step 2](https://tools.ietf.org/html/rfc2315#section-10.3).
/// [RFC 2315 Section 10.3 step 2] https://www.rfc-editor.org/rfc/rfc2315#section-10.3).
/// This padding is stripped when the message is decrypted.
/// {@endtemplate}
///
Expand Down Expand Up @@ -237,7 +237,7 @@ final class AesCbcSecretKey {
/// {@template AesCbcSecretKey-decrypt:padding}
/// The encrypted [data] is always assumed to be padded in PKCS#7 mode,
/// as described in
/// [RFC 2315 Section 10.3 step 2](https://tools.ietf.org/html/rfc2315#section-10.3).
/// [RFC 2315 Section 10.3 step 2]( https://www.rfc-editor.org/rfc/rfc2315#section-10.3).
/// This padding is stripped from the decrypted return value.
/// The [encryptBytes] and [encryptStream] methods always apply this padding.
/// {@endtemplate}
Expand Down Expand Up @@ -304,6 +304,6 @@ final class AesCbcSecretKey {
/// print(jsonEncode(jwk));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc7517
/// [1]:https://www.rfc-editor.org/rfc/rfc7517
Future<Map<String, dynamic>> exportJsonWebKey() => _impl.exportJsonWebKey();
}
6 changes: 3 additions & 3 deletions lib/src/webcrypto/webcrypto.aesctr.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ part of 'webcrypto.dart';
/// {@macro AesCtrSecretKey-encryptBytes/decryptBytes:example}
///
/// [1]: https://csrc.nist.gov/publications/detail/sp/800-38a/final
/// [2]: https://tools.ietf.org/html/rfc7517
/// [2]: https://www.rfc-editor.org//rfc7517
final class AesCtrSecretKey {
final AesCtrSecretKeyImpl _impl;

Expand Down Expand Up @@ -103,7 +103,7 @@ final class AesCtrSecretKey {
/// print(jsonEncode(keyData));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc7517
/// [1]:https://www.rfc-editor.org//rfc7517
static Future<AesCtrSecretKey> importJsonWebKey(
Map<String, dynamic> jwk) async {
final impl = await webCryptImpl.aesCtrSecretKey.importJsonWebKey(jwk);
Expand Down Expand Up @@ -329,6 +329,6 @@ final class AesCtrSecretKey {
/// print(jsonEncode(jwk));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc7517
/// [1]:https://www.rfc-editor.org//rfc7517
Future<Map<String, dynamic>> exportJsonWebKey() => _impl.exportJsonWebKey();
}
6 changes: 3 additions & 3 deletions lib/src/webcrypto/webcrypto.aesgcm.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ part of 'webcrypto.dart';
/// {@macro AesGcmSecretKey-encryptBytes/decryptBytes:example}
///
/// [1]: https://csrc.nist.gov/pubs/sp/800/38/d/final
/// [2]: https://tools.ietf.org/html/rfc7517
/// [2]: https://www.rfc-editor.org/rfc/rfc7517
/// [3]: https://en.wikipedia.org/wiki/Authenticated_encryption
final class AesGcmSecretKey {
final AesGcmSecretKeyImpl _impl;
Expand Down Expand Up @@ -103,7 +103,7 @@ final class AesGcmSecretKey {
/// print(jsonEncode(keyData));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc7517
/// [1]: https://www.rfc-editor.org/rfc/rfc7517
static Future<AesGcmSecretKey> importJsonWebKey(
Map<String, dynamic> jwk) async {
final impl = await webCryptImpl.aesGcmSecretKey.importJsonWebKey(jwk);
Expand Down Expand Up @@ -282,6 +282,6 @@ final class AesGcmSecretKey {
/// print(jsonEncode(jwk));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc7517
/// [1]:https://www.rfc-editor.org/rfc/rfc7517
Future<Map<String, dynamic>> exportJsonWebKey() => _impl.exportJsonWebKey();
}
4 changes: 2 additions & 2 deletions lib/src/webcrypto/webcrypto.ecdh.dart
Original file line number Diff line number Diff line change
Expand Up @@ -213,9 +213,9 @@ final class EcdhPrivateKey {
// null for length (in this primitive). However, you can always know the right
// length from the curve. Note p512 can provide up to: 528 bits!!!
//
// See: https://tools.ietf.org/html/rfc6090#section-4
// See:https://www.rfc-editor.org/rfc/rfc6090#section-4
// Notice that this is not uniformly distributed, see also:
// https://tools.ietf.org/html/rfc6090#appendix-B
//https://www.rfc-editor.org/rfc/rfc6090#appendix-B
Future<Uint8List> deriveBits(int length, EcdhPublicKey publicKey) async {
final publicKeyImpl = publicKey._impl;

Expand Down
2 changes: 1 addition & 1 deletion lib/src/webcrypto/webcrypto.hkdf.dart
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ part of 'webcrypto.dart';
/// ```
/// {@endtemplate}
///
/// [1]: https://tools.ietf.org/html/rfc5869
/// [1]:https://www.rfc-editor.org/rfc/rfc5869
// TODO: It might be wise to use a random salt, then suggest that the non-secret
// salt is stored or exchanged...
final class HkdfSecretKey {
Expand Down
4 changes: 2 additions & 2 deletions lib/src/webcrypto/webcrypto.hmac.dart
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ final class HmacSecretKey {
/// print(jsonEncode(keyData));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc7517
/// [1]: https://www.rfc-editor.org/rfc/rfc7517
static Future<HmacSecretKey> importJsonWebKey(
// TODO: Determine if the "alg" property can be omitted, and update documentation accordingly
// also make tests covering cases where "alg" is omitted.
Expand Down Expand Up @@ -376,6 +376,6 @@ final class HmacSecretKey {
/// print(jsonEncode(jwk));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc7517
/// [1]:https://www.rfc-editor.org/rfc/rfc7517
Future<Map<String, dynamic>> exportJsonWebKey() => _impl.exportJsonWebKey();
}
4 changes: 2 additions & 2 deletions lib/src/webcrypto/webcrypto.pbkdf2.dart
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ part of 'webcrypto.dart';
/// ```
/// {@endtemplate}
///
/// [1]: https://tools.ietf.org/html/rfc8018
/// [1]:https://www.rfc-editor.org/rfc/rfc8018
// TODO: Rewrite all RFC links to use https://www.rfc-editor.org/rfc/rfcXXXX

final class Pbkdf2SecretKey {
Expand Down Expand Up @@ -87,7 +87,7 @@ final class Pbkdf2SecretKey {
///
/// {@macro Pbkdf2SecretKey:example}
///
/// [1]: https://tools.ietf.org/html/rfc8018
/// [1]: https://www.rfc-editor.org/rfc/rfc8018
Future<Uint8List> deriveBits(
int length,
Hash hash,
Expand Down
28 changes: 14 additions & 14 deletions lib/src/webcrypto/webcrypto.rsaoaep.dart
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,9 @@ part of 'webcrypto.dart';
/// encrypt/decrypt larger messages.
/// {@endtemplate}
///
/// [1]: https://tools.ietf.org/html/rfc3447
/// [2]: https://tools.ietf.org/html/rfc5208
/// [3]: https://tools.ietf.org/html/rfc7517
/// [1]: https://www.rfc-editor.org/rfc/rfc3447
/// [2]: https://www.rfc-editor.org/rfc/rfc5208
/// [3]: https://www.rfc-editor.org/rfc/rfc7517
final class RsaOaepPrivateKey {
final RsaOaepPrivateKeyImpl _impl;

Expand Down Expand Up @@ -113,7 +113,7 @@ final class RsaOaepPrivateKey {
/// print(PemCodec(PemLabel.privateKey).encode(rawKeyData));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc5208
/// [1]: https://www.rfc-editor.org//rfc5208
static Future<RsaOaepPrivateKey> importPkcs8Key(
List<int> keyData,
Hash hash,
Expand Down Expand Up @@ -162,7 +162,7 @@ final class RsaOaepPrivateKey {
///
/// {@macro RSA-importJsonWebKey:use-key_ops}
///
/// [1]: https://tools.ietf.org/html/rfc7517
/// [1]: https://www.rfc-editor.org/rfc/rfc7517
static Future<RsaOaepPrivateKey> importJsonWebKey(
Map<String, dynamic> jwk,
Hash hash,
Expand Down Expand Up @@ -303,7 +303,7 @@ final class RsaOaepPrivateKey {
/// print(PemCodec(PemLabel.privateKey).encode(rawPrivateKey));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc5208
/// [1]: https://www.rfc-editor.org/rfc/rfc5208
Future<Uint8List> exportPkcs8Key() => _impl.exportPkcs8Key();

/// Export RSAES-OAEP private key in [JSON Web Key][1] format.
Expand Down Expand Up @@ -331,7 +331,7 @@ final class RsaOaepPrivateKey {
/// print(jsonEncode(jwk));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc7517
/// [1]: https://www.rfc-editor.org/rfc/rfc7517
Future<Map<String, dynamic>> exportJsonWebKey() => _impl.exportJsonWebKey();
}

Expand All @@ -351,9 +351,9 @@ final class RsaOaepPrivateKey {
///
/// {@macro RSAES-OAEP-message-size-limit}
///
/// [1]: https://tools.ietf.org/html/rfc3447
/// [2]: https://tools.ietf.org/html/rfc5280
/// [3]: https://tools.ietf.org/html/rfc7517
/// [1]: https://www.rfc-editor.org/rfc/rfc3447
/// [2]: https://www.rfc-editor.org/rfc/rfc5280
/// [3]: https://www.rfc-editor.org/rfc/rfc7517
final class RsaOaepPublicKey {
final RsaOaepPublicKeyImpl _impl;

Expand Down Expand Up @@ -395,7 +395,7 @@ final class RsaOaepPublicKey {
/// print(PemCodec(PemLabel.publicKey).encode(rawKeyData));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc5280
/// [1]: https://www.rfc-editor.org/rfc/rfc5280
static Future<RsaOaepPublicKey> importSpkiKey(
List<int> keyData,
Hash hash,
Expand Down Expand Up @@ -438,7 +438,7 @@ final class RsaOaepPublicKey {
///
/// {@macro RSA-importJsonWebKey:use-key_ops}
///
/// [1]: https://tools.ietf.org/html/rfc7517
/// [1]: https://www.rfc-editor.org/rfc/rfc7517
static Future<RsaOaepPublicKey> importJsonWebKey(
Map<String, dynamic> jwk,
Hash hash,
Expand Down Expand Up @@ -543,7 +543,7 @@ final class RsaOaepPublicKey {
/// print(PemCodec(PemLabel.publicKey).encode(rawPublicKey));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc5280
/// [1]: https://www.rfc-editor.org/rfc/rfc5280
Future<Uint8List> exportSpkiKey() => _impl.exportSpkiKey();

/// Export RSAES-OAEP public key in [JSON Web Key][1] format.
Expand Down Expand Up @@ -571,6 +571,6 @@ final class RsaOaepPublicKey {
/// print(jsonEncode(jwk));
/// ```
///
/// [1]: https://tools.ietf.org/html/rfc7517
/// [1]: https://www.rfc-editor.org/rfc/rfc7517
Future<Map<String, dynamic>> exportJsonWebKey() => _impl.exportJsonWebKey();
}
Loading