Skip to content

Commit c45dda7

Browse files
Merge pull request #24 from konstantinullrich/feature/#23-Null_safety_release
Feature/#23 null safety release
2 parents 31a1438 + a884066 commit c45dda7

17 files changed

+217
-198
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 2.0.0
2+
- Migrate to support null safety
3+
14
## 1.1.3
25
- Update deprecated PointyCastle features
36

example/ec_signature_example.dart

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
import 'dart:convert';
2+
import 'dart:typed_data';
23

34
import 'package:crypton/crypton.dart';
45

56
void main() {
6-
var ecKeypair = ECKeypair.fromRandom();
7-
var message =
7+
final ecKeypair = ECKeypair.fromRandom();
8+
final message =
89
utf8.encode(DateTime.now().millisecondsSinceEpoch.toRadixString(16));
910

10-
var privateKeyString = ecKeypair.privateKey.toString();
11-
var publicKeyString = ecKeypair.publicKey.toString();
12-
var signature = ecKeypair.privateKey.createSHA256Signature(message);
13-
var verified =
11+
final privateKeyString = ecKeypair.privateKey.toString();
12+
final publicKeyString = ecKeypair.publicKey.toString();
13+
final signature =
14+
ecKeypair.privateKey.createSHA256Signature(message as Uint8List);
15+
final verified =
1416
ecKeypair.privateKey.publicKey.verifySHA256Signature(message, signature);
1517

1618
print('Your Private Key\n $privateKeyString\n---');

example/rsa_crypto_example.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import 'package:crypton/crypton.dart';
22

33
void main() {
4-
var rsaKeypair = RSAKeypair.fromRandom();
5-
var message = DateTime.now().millisecondsSinceEpoch.toRadixString(16);
4+
final rsaKeypair = RSAKeypair.fromRandom();
5+
final message = DateTime.now().millisecondsSinceEpoch.toRadixString(16);
66

7-
var privateKeyString = rsaKeypair.privateKey.toString();
8-
var publicKeyString = rsaKeypair.publicKey.toString();
9-
var encrypted = rsaKeypair.publicKey.encrypt(message);
10-
var decrypted = rsaKeypair.privateKey.decrypt(encrypted);
7+
final privateKeyString = rsaKeypair.privateKey.toString();
8+
final publicKeyString = rsaKeypair.publicKey.toString();
9+
final encrypted = rsaKeypair.publicKey.encrypt(message);
10+
final decrypted = rsaKeypair.privateKey.decrypt(encrypted);
1111

1212
print('Your Private Key\n $privateKeyString\n---');
1313
print('Your Public Key\n $publicKeyString\n---');

example/rsa_signature_example.dart

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
import 'dart:convert';
2+
import 'dart:typed_data';
23

34
import 'package:crypton/crypton.dart';
45

56
void main() {
6-
var rsaKeypair = RSAKeypair.fromRandom();
7-
var message =
7+
final rsaKeypair = RSAKeypair.fromRandom();
8+
final message =
89
utf8.encode(DateTime.now().millisecondsSinceEpoch.toRadixString(16));
910

10-
var privateKeyString = rsaKeypair.privateKey.toString();
11-
var publicKeyString = rsaKeypair.publicKey.toString();
12-
var signature = rsaKeypair.privateKey.createSHA256Signature(message);
13-
var verified = rsaKeypair.publicKey.verifySHA256Signature(message, signature);
11+
final privateKeyString = rsaKeypair.privateKey.toString();
12+
final publicKeyString = rsaKeypair.publicKey.toString();
13+
final signature =
14+
rsaKeypair.privateKey.createSHA256Signature(message as Uint8List);
15+
final verified = rsaKeypair.publicKey.verifySHA256Signature(message, signature);
1416

1517
print('Your Private Key\n $privateKeyString\n---');
1618
print('Your Public Key\n $publicKeyString\n---');

lib/src/ec/ecpoint.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ class ECPoint {
1515
curve.curve.createPoint(x, y, withCompression);
1616

1717
ECPoint operator *(BigInt k) {
18-
var point = asPointyCastle * k;
18+
final point = (asPointyCastle * k)!;
1919
return ECPoint(
20-
point.x.toBigInteger(), point.y.toBigInteger(), point.isCompressed);
20+
point.x!.toBigInteger()!, point.y!.toBigInteger()!, point.isCompressed);
2121
}
2222
}

lib/src/ec/helper.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import 'dart:typed_data';
33

44
import 'package:pointycastle/export.dart';
55

6-
ParametersWithRandom withRandom(var keyParams) {
7-
var randomSeed = Random.secure();
8-
var seed = Uint8List.fromList(
6+
ParametersWithRandom withRandom(ECKeyGeneratorParameters keyParams) {
7+
final randomSeed = Random.secure();
8+
final seed = Uint8List.fromList(
99
List<int>.generate(32, (_) => randomSeed.nextInt(256)));
10-
var fortunaRandom = FortunaRandom();
10+
final fortunaRandom = FortunaRandom();
1111
fortunaRandom.seed(KeyParameter(seed));
1212
return ParametersWithRandom(keyParams, fortunaRandom);
1313
}

lib/src/ec/keypair.dart

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,31 @@
1-
import 'package:pointycastle/export.dart' as pointy;
21
import 'package:crypton/crypton.dart';
2+
import 'package:pointycastle/export.dart' as pointy;
33

44
import 'helper.dart';
55

66
/// [Keypair] using EC Algorithm
77
class ECKeypair implements Keypair {
8-
ECPrivateKey _privateKey;
9-
ECPublicKey _publicKey;
8+
late ECPrivateKey _privateKey;
9+
late ECPublicKey _publicKey;
1010

1111
/// Create a [ECKeypair] using an [ECPrivateKey]
1212
ECKeypair(this._privateKey) : _publicKey = _privateKey.publicKey;
1313

1414
/// Generate a random [ECKeypair] on the secp256k1-Curve
1515
ECKeypair.fromRandom() {
16-
var keyParams = pointy.ECKeyGeneratorParameters(pointy.ECCurve_secp256k1());
16+
final keyParams =
17+
pointy.ECKeyGeneratorParameters(pointy.ECCurve_secp256k1());
1718

18-
var generator = pointy.ECKeyGenerator();
19+
final generator = pointy.ECKeyGenerator();
1920
generator.init(withRandom(keyParams));
2021

21-
var pair = generator.generateKeyPair();
22-
pointy.ECPublicKey publicKey = pair.publicKey;
23-
pointy.ECPrivateKey privateKey = pair.privateKey;
22+
final pair = generator.generateKeyPair();
23+
final publicKey = pair.publicKey as pointy.ECPublicKey;
24+
final privateKey = pair.privateKey as pointy.ECPrivateKey;
2425

25-
var Q = publicKey.Q;
26-
_publicKey = ECPublicKey(Q.x.toBigInteger(), Q.y.toBigInteger());
27-
_privateKey = ECPrivateKey(privateKey.d);
26+
final Q = publicKey.Q!;
27+
_publicKey = ECPublicKey(Q.x!.toBigInteger()!, Q.y!.toBigInteger()!);
28+
_privateKey = ECPrivateKey(privateKey.d!);
2829
}
2930

3031
/// Get the [ECPublicKey] associated [ECPrivateKey]

lib/src/ec/private_key.dart

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,22 @@ import 'package:pointycastle/export.dart' as pointy;
66

77
/// [PrivateKey] using EC Algorithm
88
class ECPrivateKey implements PrivateKey {
9-
pointy.ECPrivateKey _privateKey;
9+
final pointy.ECPrivateKey _privateKey;
1010
static final pointy.ECDomainParameters curve = pointy.ECCurve_secp256k1();
1111

1212
/// Create an [ECPrivateKey] for the given d parameter.
13-
ECPrivateKey(BigInt d) {
14-
_privateKey = pointy.ECPrivateKey(d, curve);
15-
}
13+
ECPrivateKey(BigInt d) : _privateKey = pointy.ECPrivateKey(d, curve);
1614

1715
/// Create an [ECPrivateKey] from the given String.
18-
ECPrivateKey.fromString(String privateKeyString) {
19-
_privateKey =
20-
pointy.ECPrivateKey(BigInt.parse(privateKeyString, radix: 16), curve);
21-
}
16+
ECPrivateKey.fromString(String privateKeyString)
17+
: _privateKey = pointy.ECPrivateKey(
18+
BigInt.parse(privateKeyString, radix: 16), curve);
2219

2320
/// Sign an message with SHA-256 which can be verified using the associated [ECPublicKey]
2421
@override
2522
@Deprecated('Use createSHA256Signature for creating SHA-256 signatures')
2623
String createSignature(String message) =>
27-
utf8.decode(createSHA256Signature(utf8.encode(message)));
24+
utf8.decode(createSHA256Signature(utf8.encode(message) as Uint8List));
2825

2926
/// Sign an message with SHA-256 which can be verified using the associated [ECPublicKey]
3027
@override
@@ -37,29 +34,30 @@ class ECPrivateKey implements PrivateKey {
3734
_createSignature(message, 'SHA-512/DET-ECDSA');
3835

3936
Uint8List _createSignature(Uint8List message, String algorithm) {
40-
var signer = pointy.Signer(algorithm);
37+
final signer = pointy.Signer(algorithm);
4138
pointy.AsymmetricKeyParameter<pointy.ECPrivateKey> privateKeyParams =
4239
pointy.PrivateKeyParameter(_privateKey);
4340
signer.init(true, privateKeyParams);
44-
pointy.ECSignature sig = signer.generateSignature(message);
45-
return utf8.encode(sig.r.toRadixString(16) + sig.s.toRadixString(16));
41+
final sig = signer.generateSignature(message) as pointy.ECSignature;
42+
return utf8.encode(sig.r.toRadixString(16) + sig.s.toRadixString(16))
43+
as Uint8List;
4644
}
4745

4846
/// Get the [ECPublicKey] of the [ECPrivateKey]
4947
@override
5048
ECPublicKey get publicKey {
51-
var Q = curve.G * _privateKey.d;
52-
return ECPublicKey(Q.x.toBigInteger(), Q.y.toBigInteger());
49+
final Q = (curve.G * d)!;
50+
return ECPublicKey(Q.x!.toBigInteger()!, Q.y!.toBigInteger()!);
5351
}
5452

5553
/// Get the d Parameter as [BigInt]
56-
BigInt get d => _privateKey.d;
54+
BigInt get d => _privateKey.d!;
5755

5856
/// Export a [ECPrivateKey] as Pointy Castle ECPrivateKey
5957
@override
6058
pointy.ECPrivateKey get asPointyCastle => _privateKey;
6159

6260
/// Export a [ECPrivateKey] as String which can be reversed using [ECPrivateKey.fromString].
6361
@override
64-
String toString() => _privateKey.d.toRadixString(16);
62+
String toString() => d.toRadixString(16);
6563
}

lib/src/ec/public_key.dart

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,25 @@ import 'package:pointycastle/export.dart' as pointy;
66

77
/// [PublicKey] using EC Algorithm
88
class ECPublicKey implements PublicKey {
9-
pointy.ECPublicKey _publicKey;
9+
final pointy.ECPublicKey _publicKey;
1010
static final pointy.ECDomainParameters curve = pointy.ECCurve_secp256k1();
1111

1212
/// Create an [ECPublicKey] for the given coordinates.
13-
ECPublicKey(BigInt x, BigInt y) {
14-
var Q = ECPoint(x, y, true);
15-
_publicKey = pointy.ECPublicKey(Q.asPointyCastle, curve);
16-
}
13+
ECPublicKey(BigInt x, BigInt y)
14+
: _publicKey =
15+
pointy.ECPublicKey(ECPoint(x, y, true).asPointyCastle, curve);
1716

1817
/// Create an [ECPublicKey] from the given String.
19-
ECPublicKey.fromString(String publicKeyString) {
20-
var Q = curve.curve.decodePoint(base64Decode(publicKeyString));
21-
_publicKey = pointy.ECPublicKey(Q, curve);
22-
}
18+
ECPublicKey.fromString(String publicKeyString)
19+
: _publicKey = pointy.ECPublicKey(
20+
curve.curve.decodePoint(base64Decode(publicKeyString)), curve);
2321

2422
/// Verify the signature of a SHA256-hashed message signed with the associated [ECPrivateKey]
2523
@Deprecated('For SHA256 signature verification use verifySHA256Signature')
2624
@override
2725
bool verifySignature(String message, String signature) =>
28-
verifySHA256Signature(utf8.encode(message), utf8.encode(signature));
26+
verifySHA256Signature(utf8.encode(message) as Uint8List,
27+
utf8.encode(signature) as Uint8List);
2928

3029
/// Verify the signature of a SHA256-hashed message signed with the associated [ECPrivateKey]
3130
@override
@@ -39,30 +38,30 @@ class ECPublicKey implements PublicKey {
3938

4039
bool _verifySignature(
4140
Uint8List message, Uint8List signatureString, String algorithm) {
42-
var sigLength = (signatureString.length / 2).round();
43-
var r = BigInt.parse(
41+
final sigLength = (signatureString.length / 2).round();
42+
final r = BigInt.parse(
4443
utf8.decode(signatureString.sublist(0, sigLength)),
4544
radix: 16,
4645
);
47-
var s = BigInt.parse(
46+
final s = BigInt.parse(
4847
utf8.decode(signatureString.sublist(sigLength)),
4948
radix: 16,
5049
);
51-
var signature = pointy.ECSignature(r, s);
52-
var signer = pointy.Signer(algorithm);
50+
final signature = pointy.ECSignature(r, s);
51+
final signer = pointy.Signer(algorithm);
5352
signer.init(false, pointy.PublicKeyParameter(_publicKey));
5453
return signer.verifySignature(message, signature);
5554
}
5655

5756
/// Get [ECPoint] Q, which is the Public Point
58-
ECPoint get Q => ECPoint(_publicKey.Q.x.toBigInteger(),
59-
_publicKey.Q.y.toBigInteger(), _publicKey.Q.isCompressed);
57+
ECPoint get Q => ECPoint(_publicKey.Q!.x!.toBigInteger()!,
58+
_publicKey.Q!.y!.toBigInteger()!, _publicKey.Q!.isCompressed);
6059

6160
/// Export a [ECPublicKey] as Pointy Castle ECPublicKey
6261
@override
6362
pointy.ECPublicKey get asPointyCastle => _publicKey;
6463

6564
/// Export a [ECPublicKey] as String which can be reversed using [ECPublicKey.fromString].
6665
@override
67-
String toString() => base64Encode(_publicKey.Q.getEncoded());
66+
String toString() => base64Encode(_publicKey.Q!.getEncoded());
6867
}

lib/src/keypair.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ abstract class Keypair {
88
Keypair.fromRandom();
99

1010
/// Get the [PublicKey] associated [PrivateKey]
11-
PublicKey get publicKey => null;
11+
PublicKey get publicKey =>
12+
throw UnimplementedError('publicKey is not implemented yet!');
1213

1314
/// Get the [PrivateKey] associated [PublicKey]
14-
PrivateKey get privateKey => null;
15+
PrivateKey get privateKey =>
16+
throw UnimplementedError('privateKey is not implemented yet!');
1517
}

0 commit comments

Comments
 (0)