Warning: session_start(): open(/var/lib/php/sessions/sess_8j3gi6c94bk8r8ivjvml1kkfgn, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
!include once #1030462 // BouncyCastle
concept Entry {
S publicKey;
SecretValue privateKey;
S comment;
S globalID = aGlobalID();
}
cmodule2 WebPushKeyManager > DynCRUD {
KeyPair generateKeyPair() ctex {
ECNamedCurveParameterSpec parameterSpec = ECNamedCurveTable.getParameterSpec(nl.martijndwars.webpush.Utils.CURVE);
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(nl.martijndwars.webpush.Utils.ALGORITHM,
org.bouncycastle.jce.provider.BouncyCastleProvider.PROVIDER_NAME);
keyPairGenerator.initialize(parameterSpec);
ret keyPairGenerator.generateKeyPair();
}
// API
PKIKeyPair getKeyPair() {
lock dbLock();
Entry entry = conceptWhere Entry();
if (entry == null) {
KeyPair keyPair = generateKeyPair();
ECPublicKey publicKey = cast keyPair.getPublic();
ECPrivateKey privateKey = cast keyPair.getPrivate();
byte[] encodedPublicKey = nl.martijndwars.webpush.Utils.encode(publicKey);
byte[] encodedPrivateKey = nl.martijndwars.webpush.Utils.encode(privateKey);
S publicKeyString = base64encode(encodedPublicKey);
S privateKeyString = base64encode(encodedPrivateKey);
Entry entry = cnew Entry(publicKey := publicKeyString,
privateKey := SecretValue(privateKeyString));
}
ret entry;
}
}