O pacote Bouncy Castle Crypto é uma implementação Java de algoritmos criptográficos, foi desenvolvido pela Legion of the Bouncy Castle, uma instituição de caridade australiana registrada, com uma pequena ajuda! A Legião e as últimas novidades deste pacote podem ser encontradas em https://www.bouncycastle.org.
A Legião também agradece com gratidão as contribuições feitas a este pacote por outros (veja aqui a lista atual). Se você gostaria de contribuir com nossos esforços, sinta-se à vontade para entrar em contato conosco ou visitar nossa página de doações, patrocinar algum trabalho específico ou adquirir um contrato de suporte através do Crypto Workshop (agora parte do Keyfactor).
O pacote é organizado para conter uma API leve adequada para uso em qualquer ambiente (incluindo o recém-lançado J2ME) com infraestrutura adicional para conformar os algoritmos à estrutura JCE.
Salvo indicação em contrário, este software é distribuído sob uma licença baseada na licença MIT X Consortium. Para visualizar a licença, veja aqui. A biblioteca OpenPGP também inclui uma biblioteca BZIP2 modificada que é licenciada sob a Licença de Software Apache, Versão 2.0.
Nota : esta árvore de origem não é a versão FIPS das APIs - se você estiver interessado em nossa versão FIPS, entre em contato conosco diretamente em [email protected].
O arquivo bc_maven_public_key.asc contém a chave pública usada para assinar nossos artefatos no Maven Central. Você precisará usar
gpg -o bc_maven_public_key.gpg --dearmor bc_maven_public_key.asc
para proteger a chave antes de usar. Feito isso, um arquivo pode ser verificado usando:
gpg --no-default-keyring --keyring ./bc_maven_public_key.gpg --verify file_name.jar.asc file_name.jar
Nota: o ./ é necessário na frente do nome do arquivo-chave para informar ao gpg para procurar localmente.
Este projeto agora pode ser construído e testado com JDK21.
Se o script de construção detectar BC_JDK8, BC_JDK11, BC_JDK17, ele adicionará à tarefa de teste normal uma dependência de tarefas de teste que usam especificamente as JVMs endereçadas por essas variáveis ambientais. O script depende de JAVA_HOME para pegar o Java 21, se for usado.
Oferecemos suporte a testes em JVMs específicas, pois é a única maneira de ter certeza de que a biblioteca é compatível.
As variáveis ambientais a seguir podem apontar opcionalmente para JAVA_HOME para cada versão da JVM.
export BC_JDK8=/path/to/java8 export BC_JDK11=/path/to/java11 export BC_JDK17=/path/to/java17
O projeto agora usa gradlew
que pode ser invocado, por exemplo:
# from the root of the project # Ensure JAVA_HOME points to JDK 21 or higher JAVA_HOME or that # gradlew can find a java 21 installation to use. ./gradlew clean build
O script gradle tentará verificar sua existência, mas não a exatidão de seu valor.
Alguns subprojetos produzem jars multi-release e esses jars podem ser testados especificamente em diferentes versões de jvm.
Se os env vars estiverem definidos:
export BC_JDK8=/path/to/java8 export BC_JDK11=/path/to/java11 export BC_JDK17=/path/to/java17
Se apenas um Java 21 JDK estiver presente, a tarefa de teste normal e o test21 serão executados apenas.
O JCE de sala limpa, para uso com JDK 1.1 a JDK 1.3, está no diretório jce/src/main/java. A partir do JDK 1.4 e posterior, o JCE é fornecido com a JVM, a origem dos JDKs posteriores segue o progresso feito nas versões posteriores do JCE. Se você estiver usando uma versão posterior do JDK que vem com uma instalação JCE, não inclua o diretório jce como arquivo de origem, pois ele entrará em conflito com a API JCE instalada com seu JDK.
O módulo principal fornece todas as funcionalidades das APIs leves.
O módulo prov fornece todas as funcionalidades do provedor JCA/JCE.
O módulo util é o local do código que é usado por outros módulos que não precisam estar em prov. No momento, trata-se em grande parte de classes ASN.1 para o módulo PKIX.
O módulo pkix é o local do código para geração de certificados X.509 e das APIs para padrões que dependem de ASN.1, como CMS, TSP, PKCS#12, OCSP, CRMF e CMP.
O módulo de correio fornece uma API S/MIME construída sobre CMS.
O módulo pg é o local do código usado para suportar OpenPGP.
O módulo tls é o local do código usado para uma API TLS geral e um provedor JSSE.
Os scripts de construção que acompanham a distribuição completa permitem a criação de diferentes versões usando diferentes árvores de origem, excluindo classes que não são apropriadas e copiando as classes de compatibilidade necessárias dos diretórios que contêm classes de compatibilidade apropriadas para a distribuição.
Se você quiser tentar criar uma compilação para você mesmo, usando seu próprio ambiente, a melhor maneira de fazer isso é começar com a compilação para a distribuição na qual você está interessado, certificar-se de que as compilações e, em seguida, modificar seus scripts de compilação para fazer o exclusões necessárias e cópias de arquivos para sua configuração, caso contrário, você provavelmente obterá exceções de classe não encontrada. A ressalva final é que, como a distribuição j2me inclui algumas classes de compatibilidade começando no pacote java, você precisa usar um ofuscador para alterar os nomes dos pacotes antes de tentar importar um midlet usando a API BC.
Importante : você também precisará verificar o repositório bc-test-data no mesmo nível do repositório bc-java se quiser executar os testes.
Para ver alguns exemplos, veja os programas de teste nos pacotes:
org.bouncycastle.crypto.test
org.bouncycastle.jce.provider.test
org.bouncycastle.cms.test
org.bouncycastle.mail.smime.test
org.bouncycastle.openpgp.test
org.bouncycastle.tsp.test
Existem também alguns exemplos de programas específicos para lidar com SMIME e OpenPGP. Eles podem ser encontrados em:
org.bouncycastle.mail.smime.examples
org.bouncycastle.openpgp.examples
Para os interessados, existem 2 mailing lists para participação neste projeto. Para se inscrever use os links abaixo e inclua a palavra assinar no corpo da mensagem. (Para cancelar a assinatura, substitua subscribe por unsubscribe no corpo da mensagem)
[email protected]
Esta lista de discussão é apenas para anúncios de novos lançamentos; assinantes em geral não podem postar nela.
[email protected]
Esta lista de discussão é para discussão do desenvolvimento do pacote. Isto inclui bugs, comentários, solicitações de melhorias, dúvidas sobre uso ou operação.
NOTA: Você precisa estar inscrito para enviar e-mails para a lista de discussão acima.
Se você quiser fornecer feedback diretamente aos membros da Legião , use [email protected]. Se quiser ajudar este projeto a sobreviver, considere fazer uma doação.
Para relatórios/solicitações de bugs, você pode relatar problemas aqui no github ou via feedback-crypto, se necessário. Aceitaremos solicitações pull baseadas neste repositório também, mas apenas com base em que qualquer código incluído possa ser distribuído sob a licença Bouncy Castle.
Aproveitar!