-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGPGKeyGenerator2.java
More file actions
65 lines (61 loc) · 2.9 KB
/
GPGKeyGenerator2.java
File metadata and controls
65 lines (61 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.stackbytes.services;
import jakarta.annotation.PostConstruct;
import org.bouncycastle.openpgp.*;
import org.bouncycastle.openpgp.operator.PBESecretKeyEncryptor;
import org.bouncycastle.openpgp.operator.PGPContentSignerBuilder;
import org.bouncycastle.openpgp.operator.PGPDigestCalculator;
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentSignerBuilder;
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPDigestCalculatorProviderBuilder;
import org.bouncycastle.openpgp.operator.jcajce.JcaPGPKeyPair;
import org.bouncycastle.openpgp.operator.jcajce.JcePBESecretKeyEncryptorBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags;
import java.io.ByteArrayOutputStream;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.util.Date;
@Component
public class GPGKeyGenerator2 {
@Autowired
private GetProperties getProperties;
@PostConstruct
public void init() {
BouncyCastleSetup.setup();
}
public PGPKeyRingGenerator generateKey(String id) throws Exception{
String passphrase = getProperties.getProperties("gpg.passphrase");
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair rsaKeyPair = keyPairGenerator.generateKeyPair();
PGPKeyPair pgpKeyPair = new JcaPGPKeyPair(PGPPublicKey.RSA_GENERAL, rsaKeyPair, new Date());
PGPDigestCalculator sha256Calc = new JcaPGPDigestCalculatorProviderBuilder().build().get(PGPUtil.SHA1);
PBESecretKeyEncryptor keyEncryptor = new JcePBESecretKeyEncryptorBuilder(SymmetricKeyAlgorithmTags.AES_256, sha256Calc)
.setProvider("BC")
.build(passphrase.toCharArray());
PGPContentSignerBuilder contentSignerBuilder = new JcaPGPContentSignerBuilder(pgpKeyPair.getPublicKey().getAlgorithm(), PGPUtil.SHA1)
.setProvider("BC");
return new PGPKeyRingGenerator(
PGPSignature.POSITIVE_CERTIFICATION,
pgpKeyPair,
id,
sha256Calc,
null,
null,
contentSignerBuilder,
keyEncryptor
);
}
public byte[] getPublicKeyBytes(PGPKeyRingGenerator keyRingGenerator) throws Exception {
PGPPublicKeyRing publicKeyRing = keyRingGenerator.generatePublicKeyRing();
ByteArrayOutputStream out = new ByteArrayOutputStream();
publicKeyRing.encode(out);
return out.toByteArray();
}
public byte[] getPrivateKeyBytes(PGPKeyRingGenerator keyRingGenerator) throws Exception {
PGPSecretKeyRing secretKeyRing = keyRingGenerator.generateSecretKeyRing();
ByteArrayOutputStream out = new ByteArrayOutputStream();
secretKeyRing.encode(out);
return out.toByteArray();
}
}