wesabe / grendel Goto Github PK
View Code? Open in Web Editor NEWGrendel is a RESTful web service which allows for the secure storage of users' documents.
License: Other
Grendel is a RESTful web service which allows for the secure storage of users' documents.
License: Other
I wonder if it would be worthwhile to have a way to store larger documents outside of the database -- e.g., PDFs (such as transaction attachments).
Hi There,
Apologies if I'm posting in the wrong place.
I'm trying to install grendel on OS X following the GETTING-STARTED.md
file. I have installed the latest Java JDK, which on OS X put's JAVA_HOME
in /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home
and added the Bouncy Castle .jar to /Library/Java/Extentions
as described here.
When I clone grendel, and run mvn clean package
I get the below output.
I'm not really sure where to begin with this issue - any help is much appreciated! :)
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Grendel 0.4.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repository.jboss.org/maven2/com/wideplay/warp/warp-persist/2.0-SNAPSHOT/maven-metadata.xml
[WARNING] Could not transfer metadata com.wideplay.warp:warp-persist:2.0-SNAPSHOT/maven-metadata.xml from/to jboss (http://repository.jboss.org/maven2): Access denied to: http://repository.jboss.org/maven2/com/wideplay/warp/warp-persist/2.0-SNAPSHOT/maven-metadata.xml, ReasonPhrase:Forbidden.
[WARNING] Failure to transfer com.wideplay.warp:warp-persist:2.0-SNAPSHOT/maven-metadata.xml from http://repository.jboss.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of jboss has elapsed or updates are forced. Original error: Could not transfer metadata com.wideplay.warp:warp-persist:2.0-SNAPSHOT/maven-metadata.xml from/to jboss (http://repository.jboss.org/maven2): Access denied to: http://repository.jboss.org/maven2/com/wideplay/warp/warp-persist/2.0-SNAPSHOT/maven-metadata.xml, ReasonPhrase:Forbidden.
[INFO]
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ grendel ---
[INFO] Deleting /Users/fred/Library/grendel/target
[INFO]
[INFO] --- maven-resources-plugin:2.3:resources (default-resources) @ grendel ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.0.2:compile (default-compile) @ grendel ---
[INFO] Compiling 53 source files to /Users/fred/Library/grendel/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.3:testResources (default-testResources) @ grendel ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 4 resources
[INFO]
[INFO] --- maven-compiler-plugin:2.0.2:testCompile (default-testCompile) @ grendel ---
[INFO] Compiling 46 source files to /Users/fred/Library/grendel/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ grendel ---
[INFO] Surefire report directory: /Users/fred/Library/grendel/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.wesabe.grendel.auth.tests.BasicAuthProviderTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.273 sec
Running com.wesabe.grendel.auth.tests.CredentialsTest
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.195 sec
Running com.wesabe.grendel.auth.tests.SessionTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec
Running com.wesabe.grendel.entities.dao.tests.DocumentDAOTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.194 sec
Running com.wesabe.grendel.entities.dao.tests.UserDAOTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 sec
Running com.wesabe.grendel.entities.tests.DocumentTest
Tests run: 15, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.196 sec <<< FAILURE!
Running com.wesabe.grendel.entities.tests.UserTest
Tests run: 7, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.013 sec <<< FAILURE!
Running com.wesabe.grendel.modules.tests.SecureRandomProviderTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.235 sec
Running com.wesabe.grendel.openpgp.tests.AsymmetricAlgorithmTest
Tests run: 26, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.033 sec
Running com.wesabe.grendel.openpgp.tests.CompressionAlgorithmTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.009 sec
Running com.wesabe.grendel.openpgp.tests.CryptographicExceptionTest
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec
Running com.wesabe.grendel.openpgp.tests.HashAlgorithmTest
Tests run: 24, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.03 sec
Running com.wesabe.grendel.openpgp.tests.KeyFlagTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.012 sec
Running com.wesabe.grendel.openpgp.tests.KeySetGeneratorTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.852 sec <<< FAILURE!
Running com.wesabe.grendel.openpgp.tests.KeySetTest
Tests run: 5, Failures: 0, Errors: 5, Skipped: 0, Time elapsed: 0.007 sec <<< FAILURE!
Running com.wesabe.grendel.openpgp.tests.KeySignatureTest
Tests run: 9, Failures: 0, Errors: 9, Skipped: 0, Time elapsed: 0.015 sec <<< FAILURE!
Running com.wesabe.grendel.openpgp.tests.MasterKeyTest
Tests run: 16, Failures: 0, Errors: 16, Skipped: 0, Time elapsed: 0.025 sec <<< FAILURE!
Running com.wesabe.grendel.openpgp.tests.MessageReaderTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.001 sec <<< FAILURE!
Running com.wesabe.grendel.openpgp.tests.MessageWriterTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec <<< FAILURE!
Running com.wesabe.grendel.openpgp.tests.PregeneratedDHParameterSpecTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.468 sec <<< FAILURE!
Running com.wesabe.grendel.openpgp.tests.PregeneratedDSAParameterSpecTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.047 sec
Running com.wesabe.grendel.openpgp.tests.SignatureTypeTest
Tests run: 30, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.034 sec
Running com.wesabe.grendel.openpgp.tests.SubKeyTest
Tests run: 11, Failures: 0, Errors: 11, Skipped: 0, Time elapsed: 0.021 sec <<< FAILURE!
Running com.wesabe.grendel.openpgp.tests.SymmetricAlgorithmTest
Tests run: 24, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.019 sec
Running com.wesabe.grendel.openpgp.tests.UnlockedKeySetTest
Tests run: 3, Failures: 0, Errors: 3, Skipped: 0, Time elapsed: 0.003 sec <<< FAILURE!
Running com.wesabe.grendel.openpgp.tests.UnlockedMasterKeyTest
Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.002 sec <<< FAILURE!
Running com.wesabe.grendel.openpgp.tests.UnlockedSubKeyTest
Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.002 sec <<< FAILURE!
Running com.wesabe.grendel.representations.tests.CreateUserRepresentationTest
Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.125 sec
Running com.wesabe.grendel.representations.tests.DocumentListRepresentationTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.048 sec
Running com.wesabe.grendel.representations.tests.LinkedDocumentListRepresentationTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 sec
Running com.wesabe.grendel.representations.tests.LinkListRepresentationTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.007 sec
Running com.wesabe.grendel.representations.tests.UpdateUserRepresentationTest
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec
Running com.wesabe.grendel.representations.tests.UserInfoRepresentationTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.013 sec
Running com.wesabe.grendel.representations.tests.UserListRepresentationTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec
Running com.wesabe.grendel.representations.tests.ValidationExceptionTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec
Running com.wesabe.grendel.resources.tests.DocumentResourceTest
Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.124 sec
Running com.wesabe.grendel.resources.tests.DocumentsResourceTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec
Running com.wesabe.grendel.resources.tests.LinkedDocumentResourceTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.033 sec
Running com.wesabe.grendel.resources.tests.LinkedDocumentsResourceTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec
Running com.wesabe.grendel.resources.tests.LinkResourceTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.032 sec
Running com.wesabe.grendel.resources.tests.LinksResourceTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec
Running com.wesabe.grendel.resources.tests.UserResourceTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.029 sec
Running com.wesabe.grendel.resources.tests.UsersResourceTest
Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.049 sec
Running com.wesabe.grendel.util.tests.HashCodeTest
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
Running com.wesabe.grendel.util.tests.IntegerEquivalentsTest
Tests run: 7, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.009 sec
Running com.wesabe.grendel.util.tests.IteratorsTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
Results :
Tests in error:
itCanDecryptIt(com.wesabe.grendel.entities.tests.DocumentTest$Decrypting_A_Document_Body): org/bouncycastle/asn1/DEREncodable
itStoresItAsAnEncryptedOpenPGPMessage(com.wesabe.grendel.entities.tests.DocumentTest$Encrypting_A_Document_Body): org/bouncycastle/asn1/DEREncodable
itHasAUserId(com.wesabe.grendel.entities.tests.UserTest$A_User_Loaded_From_The_Database): org/bouncycastle/asn1/DEREncodable
com.wesabe.grendel.openpgp.tests.KeySetGeneratorTest$A_Freshly_Generated_KeySet: org/bouncycastle/asn1/DEREncodable
itHasAMasterKey(com.wesabe.grendel.openpgp.tests.KeySetTest$A_Key_Set): org/bouncycastle/asn1/DEREncodable
itHasASubKey(com.wesabe.grendel.openpgp.tests.KeySetTest$A_Key_Set): org/bouncycastle/asn1/DEREncodable
itHasAUserID(com.wesabe.grendel.openpgp.tests.KeySetTest$A_Key_Set): org/bouncycastle/asn1/DEREncodable
itSerializesItselfToAStream(com.wesabe.grendel.openpgp.tests.KeySetTest$A_Key_Set): org/bouncycastle/asn1/DEREncodable
itIsHumanReadable(com.wesabe.grendel.openpgp.tests.KeySetTest$A_Key_Set): org/bouncycastle/asn1/DEREncodable
itHasACreationTimestamp(com.wesabe.grendel.openpgp.tests.KeySignatureTest$A_Self_Signature): org/bouncycastle/asn1/DEREncodable
itHasAKeyID(com.wesabe.grendel.openpgp.tests.KeySignatureTest$A_Self_Signature): org/bouncycastle/asn1/DEREncodable
itIsAPositiveCertification(com.wesabe.grendel.openpgp.tests.KeySignatureTest$A_Self_Signature): org/bouncycastle/asn1/DEREncodable
itHasAHashAlgorithm(com.wesabe.grendel.openpgp.tests.KeySignatureTest$A_Self_Signature): org/bouncycastle/asn1/DEREncodable
itHasAKeyAlgorithm(com.wesabe.grendel.openpgp.tests.KeySignatureTest$A_Self_Signature): org/bouncycastle/asn1/DEREncodable
itHasKeyFlags(com.wesabe.grendel.openpgp.tests.KeySignatureTest$A_Self_Signature): org/bouncycastle/asn1/DEREncodable
itHasPreferredSymmetricAlgorithms(com.wesabe.grendel.openpgp.tests.KeySignatureTest$A_Self_Signature): org/bouncycastle/asn1/DEREncodable
itHasPreferredCompressionAlgorithms(com.wesabe.grendel.openpgp.tests.KeySignatureTest$A_Self_Signature): org/bouncycastle/asn1/DEREncodable
itHasPreferredHashAlgorithms(com.wesabe.grendel.openpgp.tests.KeySignatureTest$A_Self_Signature): org/bouncycastle/asn1/DEREncodable
itReturnsAnUnlockedMasterKeyForTheCorrectPassphrase(com.wesabe.grendel.openpgp.tests.MasterKeyTest$Unlocking_A_Master_Key): org/bouncycastle/asn1/DEREncodable
itThrowsACryptographicExceptionForTheIncorrectPassphrase(com.wesabe.grendel.openpgp.tests.MasterKeyTest$Unlocking_A_Master_Key): org/bouncycastle/asn1/DEREncodable
itCannotBeLoadedAsAMasterKey(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Sub_Key): org/bouncycastle/asn1/DEREncodable
itHasACreationTimestamp(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Master_Key): org/bouncycastle/asn1/DEREncodable
itHasAUserID(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Master_Key): org/bouncycastle/asn1/DEREncodable
itHasKeyFlags(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Master_Key): org/bouncycastle/asn1/DEREncodable
itHasPreferredSymmetricAlgorithms(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Master_Key): org/bouncycastle/asn1/DEREncodable
itHasPreferredCompressionAlgorithms(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Master_Key): org/bouncycastle/asn1/DEREncodable
itHasPreferredHashAlgorithms(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Master_Key): org/bouncycastle/asn1/DEREncodable
itHasAnID(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Master_Key): org/bouncycastle/asn1/DEREncodable
itHasAHumanReadableID(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Master_Key): org/bouncycastle/asn1/DEREncodable
itIsAnRSAKey(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Master_Key): org/bouncycastle/asn1/DEREncodable
itIs2048BitsLong(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Master_Key): org/bouncycastle/asn1/DEREncodable
itCannotEncryptData(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Master_Key): org/bouncycastle/asn1/DEREncodable
itCanSignData(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Master_Key): org/bouncycastle/asn1/DEREncodable
itIsHumanReadable(com.wesabe.grendel.openpgp.tests.MasterKeyTest$A_Master_Key): org/bouncycastle/asn1/DEREncodable
itReadsAnEncryptedMessage(com.wesabe.grendel.openpgp.tests.MessageReaderTest$Reading_An_Encrypted_Message): org/bouncycastle/asn1/DEREncodable
itIsDecryptableByMessageReader(com.wesabe.grendel.openpgp.tests.MessageWriterTest$Encrypting_A_Message): org/bouncycastle/asn1/DEREncodable
itCanBeUsedToGenerateElGamalKeyPairs(com.wesabe.grendel.openpgp.tests.PregeneratedDHParameterSpecTest$A_Pregenerated_DHParameterSpec): Illegal key size or default parameters
itHasACreationTimestamp(com.wesabe.grendel.openpgp.tests.SubKeyTest$A_Sub_Key): org/bouncycastle/asn1/DEREncodable
itCannotSignData(com.wesabe.grendel.openpgp.tests.SubKeyTest$A_Sub_Key): org/bouncycastle/asn1/DEREncodable
itHasAMasterKey(com.wesabe.grendel.openpgp.tests.SubKeyTest$A_Sub_Key): org/bouncycastle/asn1/DEREncodable
itHasAUserID(com.wesabe.grendel.openpgp.tests.SubKeyTest$A_Sub_Key): org/bouncycastle/asn1/DEREncodable
itHasPreferredSymmetricAlgorithms(com.wesabe.grendel.openpgp.tests.SubKeyTest$A_Sub_Key): org/bouncycastle/asn1/DEREncodable
itHasPreferredCompressionAlgorithms(com.wesabe.grendel.openpgp.tests.SubKeyTest$A_Sub_Key): org/bouncycastle/asn1/DEREncodable
itHasPreferredHashAlgorithms(com.wesabe.grendel.openpgp.tests.SubKeyTest$A_Sub_Key): org/bouncycastle/asn1/DEREncodable
itHasAnID(com.wesabe.grendel.openpgp.tests.SubKeyTest$A_Sub_Key): org/bouncycastle/asn1/DEREncodable
itIsAnRSAKey(com.wesabe.grendel.openpgp.tests.SubKeyTest$A_Sub_Key): org/bouncycastle/asn1/DEREncodable
itIs2048BitsLong(com.wesabe.grendel.openpgp.tests.SubKeyTest$A_Sub_Key): org/bouncycastle/asn1/DEREncodable
itCanEncryptData(com.wesabe.grendel.openpgp.tests.SubKeyTest$A_Sub_Key): org/bouncycastle/asn1/DEREncodable
itHasAnUnlockedSubKey(com.wesabe.grendel.openpgp.tests.UnlockedKeySetTest$An_Unlocked_Key_Set): org/bouncycastle/asn1/DEREncodable
itHasAnUnlockedMasterKey(com.wesabe.grendel.openpgp.tests.UnlockedKeySetTest$An_Unlocked_Key_Set): org/bouncycastle/asn1/DEREncodable
itCanRelockTheKeySetWithADifferentPassphrase(com.wesabe.grendel.openpgp.tests.UnlockedKeySetTest$An_Unlocked_Key_Set): org/bouncycastle/asn1/DEREncodable
itReturnsItselfWhenUnlocked(com.wesabe.grendel.openpgp.tests.UnlockedMasterKeyTest$An_Unlocked_Master_Key): org/bouncycastle/asn1/DEREncodable
itHasAPrivateKey(com.wesabe.grendel.openpgp.tests.UnlockedMasterKeyTest$An_Unlocked_Master_Key): org/bouncycastle/asn1/DEREncodable
itReturnsItselfWhenUnlocked(com.wesabe.grendel.openpgp.tests.UnlockedSubKeyTest$An_Unlocked_Sub_Key): org/bouncycastle/asn1/DEREncodable
itHasAPrivateKey(com.wesabe.grendel.openpgp.tests.UnlockedSubKeyTest$An_Unlocked_Sub_Key): org/bouncycastle/asn1/DEREncodable
Tests run: 322, Failures: 0, Errors: 55, Skipped: 1
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.710s
[INFO] Finished at: Fri Sep 13 17:18:00 PDT 2013
[INFO] Final Memory: 23M/233M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.10:test (default-test) on project grendel: There are test failures.
[ERROR]
[ERROR] Please refer to /Users/fred/Library/grendel/target/surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
Following the instructions in GETTING-STARTED, I ran:
java -jar target/grendel-${VERSION}.jar schema -c grendel.properties > setup-grendel.sql
but the generated SQL starts with:
alter table documents drop foreign key FK_DOCUMENT_TO_OWNER;
alter table links drop foreign key FK_LINK_TO_USER;
alter table links drop foreign key FK_LINK_TO_DOCUMENT;
and since those tables don't exist yet, mysql barfs when you try to run the script.
I've been poking around the source to try to figure out how to fix this, and I'm not seeing how it's being generated. Is Shore doing it?
The README.md file says:
For help, simply run:
java -jar target/grendel-${VERSION}.jar
(Replace
${VERSION}
with whatever version you're running.)
When I run that command I get an error:
localhost:grendel marc$ java -jar target/grendel-0.1.1.jar
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:221)
at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:176)
at java.util.jar.JarVerifier.processEntry(JarVerifier.java:277)
at java.util.jar.JarVerifier.update(JarVerifier.java:188)
at java.util.jar.JarFile.initializeVerifier(JarFile.java:321)
at java.util.jar.JarFile.getInputStream(JarFile.java:386)
at sun.misc.URLClassPath$JarLoader$2.getInputStream(URLClassPath.java:689)
at sun.misc.Resource.cachedInputStream(Resource.java:61)
at sun.misc.Resource.getByteBuffer(Resource.java:144)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:249)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)
The current Grendel code uses ordinary char[] and byte[] arrays to store secrets, including passphrases and documents. (I haven't investigated private key data yetโฆ) These are cleared from memory only at the whim of the GC algorithm, which can mean that sensitive data remains in cleartext on the server well after it is needed.
This isn't a huge deal, but given Grendel's threat model โ it's designed to protect secrets while not in use, even against attackers with access to local storage โ it does represent a threat. To protect against it, the array objects' lifespan should be kept as short as possible, and they should be explicitly overwritten when no longer needed. Some Java sources explicitly recommend this practice โย a quick search turns up the following:
http://java.sun.com/javase/6/docs/api/java/io/Console.html
http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#PBEEx
However, I wouldn't be surprised if the Java world is less than consistent on this point. (And indeed: more searching turns up http://java.sun.com/security/seccodeguide.html#0-6b which provides some less-than-helpful advice on the topic. "Reduced effectiveness" is still more effectiveness than no effectiveness, though.)
-sq
Using the 0.1.2 build, I'm seeing a big stack trace when I run the example script:
localhost:examples marc$ ./create-user.sh marc testpw
* About to connect() to localhost port 8080 (#0)
* Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 8080 (#0)
> POST /users/ HTTP/1.1
> User-Agent: curl/7.17.1 (i386-apple-darwin9.1.0) libcurl/7.17.1 OpenSSL/0.9.8e zlib/1.2.3
> Host: localhost:8080
> Accept: */*
> Content-Type: application/json
> Content-Length: 33
>
< HTTP/1.1 500 com.wesabe.grendel.openpgp.CryptographicException: org.bouncycastle.openpgp.PGPException: Exception creating cipher
< Content-Type: text/html;charset=ISO-8859-1
< Cache-Control: must-revalidate,no-cache,no-store
< Content-Length: 27912
<
<title>Error 500 com.wesabe.grendel.openpgp.CryptographicException: org.bouncycastle.openpgp.PGPException: Exception creating cipher</title>
HTTP ERROR 500
Problem accessing /users/. Reason:
com.wesabe.grendel.openpgp.CryptographicException: org.bouncycastle.openpgp.PGPException: Exception creating cipher
Caused by:
com.sun.jersey.api.container.MappableContainerException: com.wesabe.grendel.openpgp.CryptographicException: org.bouncycastle.openpgp.PGPException: Exception creating cipher
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:74)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:208)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:75)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:115)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:67)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:756)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:721)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:712)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:340)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:452)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:633)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:530)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1216)
at com.wideplay.warp.persist.SessionFilter$2.run(SessionFilter.java:68)
at com.wideplay.warp.util.Lifecycles.failEarlyAndLeaveNoOneBehind(Lifecycles.java:29)
at com.wideplay.warp.persist.SessionFilter.doFilter(SessionFilter.java:77)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:425)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:931)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:362)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:867)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
at org.eclipse.jetty.server.Server.handle(Server.java:334)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:559)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1007)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:747)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:209)
at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:406)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:462)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
at java.lang.Thread.run(Thread.java:637)
Caused by: com.wesabe.grendel.openpgp.CryptographicException: org.bouncycastle.openpgp.PGPException: Exception creating cipher
at com.wesabe.grendel.openpgp.KeySetGenerator.generate(KeySetGenerator.java:122)
at com.wesabe.grendel.resources.UsersResource.create(UsersResource.java:75)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb.CGLIB$create$1(<generated>)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb$$FastClassByGuice$$41eb99b9.invoke(<generated>)
at com.google.inject.internal.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at com.google.inject.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
at com.wideplay.warp.hibernate.HibernateLocalTxnInterceptor.invoke(HibernateLocalTxnInterceptor.java:70)
at com.google.inject.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
at com.google.inject.InterceptorStackCallback.intercept(InterceptorStackCallback.java:44)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb.create(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:175)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
... 33 more
Caused by: org.bouncycastle.openpgp.PGPException: Exception creating cipher
at org.bouncycastle.openpgp.PGPSecretKey.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPSecretKey.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPKeyRingGenerator.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPKeyRingGenerator.<init>(Unknown Source)
at com.wesabe.grendel.openpgp.KeySetGenerator.generate(KeySetGenerator.java:95)
... 48 more
Caused by: java.lang.SecurityException: JCE cannot authenticate the provider BC
at javax.crypto.Cipher.getInstance(DashoA13*..)
... 53 more
Caused by: java.util.jar.JarException: Cannot parse file:/Users/marc/wesabe/git/grendel/target/grendel-0.1.2.jar
at javax.crypto.SunJCE_c.a(DashoA13*..)
at javax.crypto.SunJCE_b.b(DashoA13*..)
at javax.crypto.SunJCE_b.a(DashoA13*..)
... 54 more
Caused by:
com.wesabe.grendel.openpgp.CryptographicException: org.bouncycastle.openpgp.PGPException: Exception creating cipher
at com.wesabe.grendel.openpgp.KeySetGenerator.generate(KeySetGenerator.java:122)
at com.wesabe.grendel.resources.UsersResource.create(UsersResource.java:75)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb.CGLIB$create$1(<generated>)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb$$FastClassByGuice$$41eb99b9.invoke(<generated>)
at com.google.inject.internal.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at com.google.inject.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
at com.wideplay.warp.hibernate.HibernateLocalTxnInterceptor.invoke(HibernateLocalTxnInterceptor.java:70)
at com.google.inject.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
at com.google.inject.InterceptorStackCallback.intercept(InterceptorStackCallback.java:44)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb.create(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:175)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:208)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:75)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:115)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:67)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:756)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:721)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:712)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:340)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:452)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:633)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:530)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1216)
at com.wideplay.warp.persist.SessionFilter$2.run(SessionFilter.java:68)
at com.wideplay.warp.util.Lifecycles.failEarlyAndLeaveNoOneBehind(Lifecycles.java:29)
at com.wideplay.warp.persist.SessionFilter.doFilter(SessionFilter.java:77)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:425)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:931)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:362)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:867)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
at org.eclipse.jetty.server.Server.handle(Server.java:334)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:559)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1007)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:747)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:209)
at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:406)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:462)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
at java.lang.Thread.run(Thread.java:637)
Caused by: org.bouncycastle.openpgp.PGPException: Exception creating cipher
at org.bouncycastle.openpgp.PGPSecretKey.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPSecretKey.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPKeyRingGenerator.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPKeyRingGenerator.<init>(Unknown Source)
at com.wesabe.grendel.openpgp.KeySetGenerator.generate(KeySetGenerator.java:95)
... 48 more
Caused by: java.lang.SecurityException: JCE cannot authenticate the provider BC
at javax.crypto.Cipher.getInstance(DashoA13_..)
... 53 more
Caused by: java.util.jar.JarException: Cannot parse file:/Users/marc/wesabe/git/grendel/target/grendel-0.1.2.jar
at javax.crypto.SunJCE_c.a(DashoA13_..)
at javax.crypto.SunJCE_b.b(DashoA13_..)
at javax.crypto.SunJCE_b.a(DashoA13_..)
... 54 more
Caused by:
org.bouncycastle.openpgp.PGPException: Exception creating cipher
at org.bouncycastle.openpgp.PGPSecretKey.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPSecretKey.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPKeyRingGenerator.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPKeyRingGenerator.<init>(Unknown Source)
at com.wesabe.grendel.openpgp.KeySetGenerator.generate(KeySetGenerator.java:95)
at com.wesabe.grendel.resources.UsersResource.create(UsersResource.java:75)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb.CGLIB$create$1(<generated>)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb$$FastClassByGuice$$41eb99b9.invoke(<generated>)
at com.google.inject.internal.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at com.google.inject.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
at com.wideplay.warp.hibernate.HibernateLocalTxnInterceptor.invoke(HibernateLocalTxnInterceptor.java:70)
at com.google.inject.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
at com.google.inject.InterceptorStackCallback.intercept(InterceptorStackCallback.java:44)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb.create(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:175)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:208)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:75)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:115)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:67)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:756)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:721)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:712)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:340)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:452)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:633)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:530)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1216)
at com.wideplay.warp.persist.SessionFilter$2.run(SessionFilter.java:68)
at com.wideplay.warp.util.Lifecycles.failEarlyAndLeaveNoOneBehind(Lifecycles.java:29)
at com.wideplay.warp.persist.SessionFilter.doFilter(SessionFilter.java:77)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:425)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:931)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:362)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:867)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
at org.eclipse.jetty.server.Server.handle(Server.java:334)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:559)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1007)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:747)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:209)
at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:406)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:462)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
at java.lang.Thread.run(Thread.java:637)
Caused by: java.lang.SecurityException: JCE cannot authenticate the provider BC
at javax.crypto.Cipher.getInstance(DashoA13_..)
... 53 more
Caused by: java.util.jar.JarException: Cannot parse file:/Users/marc/wesabe/git/grendel/target/grendel-0.1.2.jar
at javax.crypto.SunJCE_c.a(DashoA13_..)
at javax.crypto.SunJCE_b.b(DashoA13_..)
at javax.crypto.SunJCE_b.a(DashoA13_..)
... 54 more
Caused by:
java.lang.SecurityException: JCE cannot authenticate the provider BC
at javax.crypto.Cipher.getInstance(DashoA13_..)
at org.bouncycastle.openpgp.PGPSecretKey.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPSecretKey.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPKeyRingGenerator.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPKeyRingGenerator.<init>(Unknown Source)
at com.wesabe.grendel.openpgp.KeySetGenerator.generate(KeySetGenerator.java:95)
at com.wesabe.grendel.resources.UsersResource.create(UsersResource.java:75)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb.CGLIB$create$1(<generated>)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb$$FastClassByGuice$$41eb99b9.invoke(<generated>)
at com.google.inject.internal.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at com.google.inject.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
at com.wideplay.warp.hibernate.HibernateLocalTxnInterceptor.invoke(HibernateLocalTxnInterceptor.java:70)
at com.google.inject.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
at com.google.inject.InterceptorStackCallback.intercept(InterceptorStackCallback.java:44)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb.create(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:175)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:208)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:75)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:115)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:67)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:756)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:721)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:712)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:340)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:452)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:633)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:530)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1216)
at com.wideplay.warp.persist.SessionFilter$2.run(SessionFilter.java:68)
at com.wideplay.warp.util.Lifecycles.failEarlyAndLeaveNoOneBehind(Lifecycles.java:29)
at com.wideplay.warp.persist.SessionFilter.doFilter(SessionFilter.java:77)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:425)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:931)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:362)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:867)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
at org.eclipse.jetty.server.Server.handle(Server.java:334)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:559)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1007)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:747)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:209)
at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:406)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:462)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
at java.lang.Thread.run(Thread.java:637)
Caused by: java.util.jar.JarException: Cannot parse file:/Users/marc/wesabe/git/grendel/target/grendel-0.1.2.jar
at javax.crypto.SunJCE_c.a(DashoA13_..)
at javax.crypto.SunJCE_b.b(DashoA13_..)
at javax.crypto.SunJCE_b.a(DashoA13_..)
... 54 more
Caused by:
java.util.jar.JarException: Cannot parse file:/Users/marc/wesabe/git/grendel/target/grendel-0.1.2.jar
at javax.crypto.SunJCE_c.a(DashoA13_..)
at javax.crypto.SunJCE_b.b(DashoA13_..)
at javax.crypto.SunJCE_b.a(DashoA13_..)
at javax.crypto.Cipher.getInstance(DashoA13_..)
at org.bouncycastle.openpgp.PGPSecretKey.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPSecretKey.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPKeyRingGenerator.<init>(Unknown Source)
at org.bouncycastle.openpgp.PGPKeyRingGenerator.<init>(Unknown Source)
at com.wesabe.grendel.openpgp.KeySetGenerator.generate(KeySetGenerator.java:95)
at com.wesabe.grendel.resources.UsersResource.create(UsersResource.java:75)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb.CGLIB$create$1(<generated>)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb$$FastClassByGuice$$41eb99b9.invoke(<generated>)
at com.google.inject.internal.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at com.google.inject.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
at com.wideplay.warp.hibernate.HibernateLocalTxnInterceptor.invoke(HibernateLocalTxnInterceptor.java:70)
at com.google.inject.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
at com.google.inject.InterceptorStackCallback.intercept(InterceptorStackCallback.java:44)
at com.wesabe.grendel.resources.UsersResource$$EnhancerByGuice$$9974c4eb.create(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:175)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:208)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:75)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:115)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:67)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:756)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:721)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:712)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:340)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:452)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:633)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:530)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1216)
at com.wideplay.warp.persist.SessionFilter$2.run(SessionFilter.java:68)
at com.wideplay.warp.util.Lifecycles.failEarlyAndLeaveNoOneBehind(Lifecycles.java:29)
at com.wideplay.warp.persist.SessionFilter.doFilter(SessionFilter.java:77)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:425)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:931)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:362)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:867)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
at org.eclipse.jetty.server.Server.handle(Server.java:334)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:559)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1007)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:747)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:209)
at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:406)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:462)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
at java.lang.Thread.run(Thread.java:637)
Powered by Jetty://
- Connection #0 to host localhost left intact
- Closing connection #0
It would be good to be able to have a session handle that would allow access to Grendel without having to store the plaintext password during the session. For instance, let me create a session on user login, use that session during the user's session on the site, and destroy it when they log out.
I followed the steps in Getting Started With Grendel and when I was building Grendel (in step 3), one failure test occurs, so that no JAR file is generated in target
file. Could anyone give some advise on how to fix this problem?
this is the information about failure test in the file target/surefire-reports
:
Test set: com.wesabe.grendel.openpgp.tests.MessageReaderTest
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.046 sec <<< FAILURE!
itReadsAnEncryptedMessage(com.wesabe.grendel.openpgp.tests.MessageReaderTest$Reading_An_Encrypted_Message) Time elapsed: 0.042 sec <<< FAILURE!
java.lang.AssertionError: expected:<[84, 104, 105, 115, 32, 105, 115, 32, 98, 97, 115, 105, 99, 97, 108, 108, 121, 32, 97, 32, 116, 101, 115, 116, 46, 13, 10, 13, 10, 87, 104, 97, 116, 32, 100, 111, 32, 121, 111, 117, 32, 116, 104, 105, 110, 107, 63]> but was:<[84, 104, 105, 115, 32, 105, 115, 32, 98, 97, 115, 105, 99, 97, 108, 108, 121, 32, 97, 32, 116, 101, 115, 116, 46, 10, 10, 87, 104, 97, 116, 32, 100, 111, 32, 121, 111, 117, 32, 116, 104, 105, 110, 107, 63]>
at org.fest.assertions.Fail.failure(Fail.java:206)
at org.fest.assertions.Assert.failure(Assert.java:141)
at org.fest.assertions.ByteArrayAssert.isEqualTo(ByteArrayAssert.java:197)
at com.wesabe.grendel.openpgp.tests.MessageReaderTest$Reading_An_Encrypted_Message.itReadsAnEncryptedMessage(MessageReaderTest.java:53)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:24)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
thanks in advance!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.