40 lines
1.4 KiB
Dart
40 lines
1.4 KiB
Dart
import 'package:crypton/crypton.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:marianum_mobile/push/push_keypair.dart';
|
|
|
|
void main() {
|
|
group('generatePushKeypairPems', () {
|
|
test('public PEM matches the Nextcloud SPKI format', () {
|
|
final pems = generatePushKeypairPems();
|
|
final pem = pems.publicKeyPem;
|
|
|
|
expect(pem, startsWith('-----BEGIN PUBLIC KEY-----\n'));
|
|
expect(pem, endsWith('\n-----END PUBLIC KEY-----'));
|
|
|
|
// RSA-2048 SPKI base64 wrapped at 64 columns is byte-exactly 450 or 451
|
|
// characters — the length Nextcloud validates against.
|
|
expect(pem.length, anyOf(450, 451));
|
|
|
|
// The END marker sits at a fixed offset (header + 392 base64 chars + 6
|
|
// embedded newlines = 425, then '\n-----END...').
|
|
expect(pem.indexOf('\n-----END PUBLIC KEY-----'), 425);
|
|
|
|
// Body lines (between the header and footer) wrap at 64 columns.
|
|
final body = pem
|
|
.split('\n')
|
|
.where((l) => !l.startsWith('-----'))
|
|
.toList();
|
|
for (final line in body.take(body.length - 1)) {
|
|
expect(line.length, 64);
|
|
}
|
|
});
|
|
|
|
test('private PEM round-trips back into a usable key', () {
|
|
final pems = generatePushKeypairPems();
|
|
final restored = RSAPrivateKey.fromPEM(pems.privateKeyPem);
|
|
final restoredPublicPem = restored.publicKey.toFormattedPEM();
|
|
expect(restoredPublicPem, pems.publicKeyPem);
|
|
});
|
|
});
|
|
}
|