Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix #58: Prefer java.util.Base64 over guava BaseEncoding #59

Merged
merged 2 commits into from
Oct 5, 2023
Merged
Changes from all commits
Commits
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
22 changes: 12 additions & 10 deletions src/main/java/com/wultra/security/ssl/pinning/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,13 @@

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.google.common.base.Charsets;
import com.google.common.io.BaseEncoding;
import com.wultra.security.ssl.pinning.errorhandling.SSLPinningException;
import com.wultra.security.ssl.pinning.model.CertificateInfo;
import io.getlime.security.powerauth.crypto.lib.generator.KeyGenerator;
import io.getlime.security.powerauth.crypto.lib.model.exception.CryptoProviderException;
import io.getlime.security.powerauth.crypto.lib.model.exception.GenericCryptoException;
import io.getlime.security.powerauth.crypto.lib.util.KeyConvertor;
import io.getlime.security.powerauth.crypto.lib.util.SignatureUtils;

import io.getlime.security.powerauth.crypto.lib.generator.KeyGenerator;
import org.apache.commons.cli.*;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
Expand Down Expand Up @@ -59,10 +56,15 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.spec.KeySpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;

/**
* SSL pinning tool command line application for generating signatures of SSL certificates.
Expand Down Expand Up @@ -284,15 +286,15 @@ CertificateInfo sign(String privateKeyPath, String privateKeyPassword, String co
final byte[] fingerPrintBytes = Hex.decode(fingerprintFormatted);

// Convert fingerprint bytes to Base64
final String fingerprintBase64 = BaseEncoding.base64().encode(fingerPrintBytes);
final String fingerprintBase64 = Base64.getEncoder().encodeToString(fingerPrintBytes);

// Signature payload
final String data = commonName + "&" + fingerprintBase64 + "&" + expirationTime;

// Compute signature of payload using ECDSA with given EC private key
final SignatureUtils utils = new SignatureUtils();
final byte[] signature = utils.computeECDSASignature(data.getBytes(Charsets.UTF_8), privKey);
final String signatureBase64 = BaseEncoding.base64().encode(signature);
final byte[] signature = utils.computeECDSASignature(data.getBytes(StandardCharsets.UTF_8), privKey);
final String signatureBase64 = Base64.getEncoder().encodeToString(signature);

// Return Fingerprint object
return new CertificateInfo(commonName, fingerprintBase64, expirationTime, signatureBase64);
Expand Down Expand Up @@ -485,7 +487,7 @@ PrivateKey exportPrivateKey(String privateKeyPath, String privateKeyPassword) th
private void printPublicKey(PublicKey publicKey) throws CryptoProviderException {
final KeyConvertor keyConversionUtilities = new KeyConvertor();
final byte[] publicKeyBytes = keyConversionUtilities.convertPublicKeyToBytes(publicKey);
final String publicKeyEncoded = BaseEncoding.base64().encode(publicKeyBytes);
final String publicKeyEncoded = Base64.getEncoder().encodeToString(publicKeyBytes);
logger.info(publicKeyEncoded);
}

Expand All @@ -496,7 +498,7 @@ private void printPublicKey(PublicKey publicKey) throws CryptoProviderException
private void printPrivateKey(PrivateKey privateKey) {
final KeyConvertor keyConversionUtilities = new KeyConvertor();
final byte[] privateKeyBytes = keyConversionUtilities.convertPrivateKeyToBytes(privateKey);
final String privateKeyEncoded = BaseEncoding.base64().encode(privateKeyBytes);
final String privateKeyEncoded = Base64.getEncoder().encodeToString(privateKeyBytes);
logger.info(privateKeyEncoded);
}

Expand Down