List of usage examples for org.bouncycastle.crypto.digests SHA512Digest doFinal
public int doFinal(byte[] out, int outOff)
From source file:cologne.eck.dr.op.crypto.password_hashing.Battcrypt_v0.java
License:Open Source License
@Override public byte[] hashPassword(int outlen, byte[] in, byte[] salt, int t_cost, int m_cost, Object... varArgs) throws DataLengthException, IllegalStateException, InvalidCipherTextException { SHA512Digest sha = new SHA512Digest(); int[] data = new int[DATA_SIZE_INT]; BlowfishEngine blowfish;// w ww .j a v a2 s .c o m long upgradeLoops = 1; long loops; int memSize = 4 << m_cost;//= 4 * 2 ** m_cost int memMask = memSize - 1; int[] mem; byte[] hashBuffer = new byte[HASH_LENGTH_BYTE];// holds hash value as bytes byte[] dataBuffer = new byte[DATA_SIZE_BYTE];// holds encrypted bytes // These are the PHP max. values if (m_cost > 18 || // maximum: 2.147.483.648 bytes (t_cost & 0xffff) > 62 || (t_cost >> 16) > 63 || outlen > HASH_LENGTH_BYTE) { throw new IllegalArgumentException("invalid parameters"); } int tmp = t_cost >> 16; if (tmp != 0) { // upgradeLoops = 1, 2, 3, 4, 6, 8, 12, 16, ... upgradeLoops = (long) (3 - (tmp & 1)) << ((tmp - 1) >> 1); } // loops = 2, 3, 4, 6, 8, 12, 16, ... tmp = t_cost & 0xffff; loops = (long) ((tmp & 1) + 2) << (tmp >> 1); // key = SHA512(SHA512(salt) || in) byte[] keyBytes = new byte[HASH_LENGTH_BYTE]; sha.update(salt, 0, salt.length); sha.doFinal(keyBytes, 0); sha.reset(); sha.update(keyBytes, 0, HASH_LENGTH_BYTE); sha.update(in, 0, in.length);//password sha.doFinal(keyBytes, 0); sha.reset(); if (wipePassword == true) { Arrays.fill(in, (byte) 0); } // initialize cipher with 448 bit (56 byte) key: // truncate keyBytes: byte[] blowfishKey = new byte[56]; System.arraycopy(keyBytes, 0, blowfishKey, 0, 56); // use zeros as IV byte[] iv = new byte[IV_LENGTH_BYTE]; KeyParameter params = new KeyParameter(blowfishKey); Arrays.fill(blowfishKey, (byte) 0); ParametersWithIV ivParams = new ParametersWithIV(params, iv); blowfish = new BlowfishEngine(); // CBC, no padding: all vectors are multiples of Blowfish block length BufferedBlockCipher cipher = new BufferedBlockCipher(new CBCBlockCipher(blowfish)); cipher.init(true, ivParams); // initialize memory-hard vector: mem = new int[DATA_SIZE_INT * memSize]; for (long u = 0; u < upgradeLoops; u++) { // initialize data: // data = SHA512(BIG_ENDIAN_64( 0) || key) || ... // ... || SHA512(BIG_ENDIAN_64(31) || key) byte[] counterBytesBE = new byte[8]; // holds counter as long to update for (int i = 0; i < DATA_SIZE_BYTE / HASH_LENGTH_BYTE; i++) { counterBytesBE[7] = (byte) i; // set first byte sha.update(counterBytesBE, 0, counterBytesBE.length); // BIG_ENDIAN_64(i) sha.update(keyBytes, 0, HASH_LENGTH_BYTE); sha.doFinal(hashBuffer, 0); sha.reset(); // hash values allow weak garbage collector attack - // so, avoid new allocations: for (int j = 0; j < HASH_LENGTH_BYTE / 4; j++) { data[HASH_LENGTH_INT * i + j] = ((hashBuffer[j * 4 + 3] & 0xFF) << 24) | ((hashBuffer[j * 4 + 2] & 0xFF) << 16) | ((hashBuffer[j * 4 + 1] & 0xFF) << 8) | (hashBuffer[j * 4 + 0] & 0xFF); // little endian order } Arrays.fill(hashBuffer, (byte) 0); } // Initialize memory: for (int i = 0; i < memSize; i++) { // data = blowfish_encrypt_cbc(data) // mem = mem || data for (int j = 0; j < DATA_SIZE_INT; j++) { dataBuffer[j * 4 + 0] = (byte) (data[j]);// little endian dataBuffer[j * 4 + 1] = (byte) (data[j] >>> 8); dataBuffer[j * 4 + 2] = (byte) (data[j] >>> 16); dataBuffer[j * 4 + 3] = (byte) (data[j] >>> 24); } int len = cipher.processBytes(dataBuffer, 0, DATA_SIZE_BYTE, dataBuffer, 0); cipher.doFinal(dataBuffer, len); cipher.reset(); // get iv for next encryption step: // "running CBC": the last block of the // previous call is the IV for the next call System.arraycopy(dataBuffer, DATA_SIZE_BYTE - IV_LENGTH_BYTE, iv, 0, IV_LENGTH_BYTE); ivParams = new ParametersWithIV(params, iv); cipher.init(true, ivParams); for (int j = 0; j < DATA_SIZE_INT; j++) { data[j] = ((dataBuffer[j * 4 + 3] & 0xFF) << 24) | ((dataBuffer[j * 4 + 2] & 0xFF) << 16) | ((dataBuffer[j * 4 + 1] & 0xFF) << 8) | (dataBuffer[j * 4 + 0] & 0xFF); // little endian order } System.arraycopy(data, 0, mem, DATA_SIZE_INT * i, DATA_SIZE_INT); } // encrypt data: for (int j = 0; j < DATA_SIZE_INT; j++) { dataBuffer[j * 4 + 0] = (byte) (data[j]);// little endian dataBuffer[j * 4 + 1] = (byte) (data[j] >>> 8); dataBuffer[j * 4 + 2] = (byte) (data[j] >>> 16); dataBuffer[j * 4 + 3] = (byte) (data[j] >>> 24); } int len = cipher.processBytes(dataBuffer, 0, DATA_SIZE_BYTE, dataBuffer, 0); cipher.doFinal(dataBuffer, len); cipher.reset(); System.arraycopy(dataBuffer, DATA_SIZE_BYTE - IV_LENGTH_BYTE, iv, 0, IV_LENGTH_BYTE); ivParams = new ParametersWithIV(params, iv); cipher.init(true, ivParams); for (int j = 0; j < DATA_SIZE_INT; j++) { data[j] = ((dataBuffer[j * 4 + 3] & 0xFF) << 24) | ((dataBuffer[j * 4 + 2] & 0xFF) << 16) | ((dataBuffer[j * 4 + 1] & 0xFF) << 8) | (dataBuffer[j * 4 + 0] & 0xFF); // little endian order } // work: for (long i = 0; i < loops; i++) { for (int j = 0; j < memSize; j++) { // in the C++ reference implementation and the paper // this rValue a 64 bit integer, but this makes only a // difference for memSize > 0xFFFFFFFF +1, while the // recommended maximum for memSize is 2^32 int rValue = ((((int) data[DATA_SIZE_INT - 1]) << 24) & 0xff000000) | ((((int) data[DATA_SIZE_INT - 1]) << 8) & 0x00ff0000) | ((((int) data[DATA_SIZE_INT - 1]) >>> 8) & 0x0000ff00) | ((((int) data[DATA_SIZE_INT - 1]) >>> 24) & 0x000000ff); int index = (int) (DATA_SIZE_INT * (rValue & memMask)); for (int k = 0; k < DATA_SIZE_INT; k++) { mem[j * DATA_SIZE_INT + k] ^= data[k] ^ mem[index + k]; } // convert to byte: for (int k = 0; k < DATA_SIZE_INT; k++) { dataBuffer[k * 4 + 0] = (byte) (mem[j * DATA_SIZE_INT + k]); dataBuffer[k * 4 + 1] = (byte) (mem[j * DATA_SIZE_INT + k] >>> 8); dataBuffer[k * 4 + 2] = (byte) (mem[j * DATA_SIZE_INT + k] >>> 16); dataBuffer[k * 4 + 3] = (byte) (mem[j * DATA_SIZE_INT + k] >>> 24); } int len1 = cipher.processBytes(dataBuffer, 0, DATA_SIZE_BYTE, dataBuffer, 0); cipher.doFinal(dataBuffer, len1); cipher.reset(); // get iv for next step: System.arraycopy(dataBuffer, DATA_SIZE_BYTE - IV_LENGTH_BYTE, iv, 0, IV_LENGTH_BYTE); for (int k = 0; k < DATA_SIZE_INT; k++) { mem[j * DATA_SIZE_INT + k] = ((dataBuffer[k * 4 + 3] & 0xFF) << 24) | ((dataBuffer[k * 4 + 2] & 0xFF) << 16) | ((dataBuffer[k * 4 + 1] & 0xFF) << 8) | (dataBuffer[k * 4 + 0] & 0xFF); // little endian order } ivParams = new ParametersWithIV(params, iv); cipher.init(true, ivParams); // data ^= mem[j] for (int k = 0; k < DATA_SIZE_INT; k++) { data[k] ^= mem[DATA_SIZE_INT * j + k]; } } } // Finish // key = truncate(SHA512(SHA512(data || key)), outlen) || zeros(HASH_LENGTH - outlen) // convert to byte: for (int k = 0; k < DATA_SIZE_INT; k++) { dataBuffer[k * 4 + 0] = (byte) (data[k]); dataBuffer[k * 4 + 1] = (byte) (data[k] >>> 8); dataBuffer[k * 4 + 2] = (byte) (data[k] >>> 16); dataBuffer[k * 4 + 3] = (byte) (data[k] >>> 24); } sha.update(dataBuffer, 0, DATA_SIZE_BYTE); sha.update(keyBytes, 0, HASH_LENGTH_BYTE); sha.doFinal(keyBytes, 0); sha.reset(); } sha.update(keyBytes, 0, HASH_LENGTH_BYTE); sha.doFinal(keyBytes, 0); sha.reset(); byte[] out = new byte[outlen]; System.arraycopy(keyBytes, 0, out, 0, out.length); // Clean-up: Arrays.fill(keyBytes, (byte) 0); Arrays.fill(dataBuffer, (byte) 0); Arrays.fill(iv, (byte) 0); Arrays.fill(data, 0); Arrays.fill(mem, (byte) 0); // wipe the key from parameters Arrays.fill(params.getKey(), (byte) 0); // prevent dead code eliminations (compiler optimizations): if ((keyBytes[HASH_LENGTH_BYTE - 1] | blowfishKey[blowfishKey.length - 1] | dataBuffer[DATA_SIZE_BYTE - 1] | hashBuffer[HASH_LENGTH_BYTE - 1] | data[DATA_SIZE_INT - 1] | iv[IV_LENGTH_BYTE - 1] | mem[mem.length - 1] | params.getKey()[params.getKey().length - 1]) != 0) { System.err.print("zeroization failed!"); } if ((wipePassword == true) && (in[in.length - 1] != 0)) { System.err.print("zeroization failed!"); } return out; }
From source file:com.verhas.licensor.License.java
License:Open Source License
/** * Calculate the SHA512 digest of the public key ring that is used to decode * the license.// w ww. j av a 2 s .c om * * @return the digest as a byte array. */ public byte[] calculatePublicKeyRingDigest() { final SHA512Digest dig = new SHA512Digest(); dig.reset(); dig.update(publicKeyRing, 0, publicKeyRing.length); final byte[] digest = new byte[dig.getDigestSize()]; dig.doFinal(digest, 0); return digest; }
From source file:dorkbox.build.util.jar.JarUtil.java
License:Apache License
private static void packEntry(PackTask task) throws IOException { InputStream inputStream = task.inputStream; int length = task.length; Repack repack = task.pack;//from www. ja v a 2 s.c om // now handle pack/compress/encrypt if (Pack200Util.canPack200(repack, task.inputStream)) { // Create the Packer object ByteArrayOutputStream outputPackStream = Pack200Util.Java.pack200(inputStream, task.debug); // convert the output stream to an input stream inputStream = new ByteArrayInputStream(outputPackStream.toByteArray()); length = inputStream.available(); } // we RELY on the the jar ALREADY being NORMALIZED (PACK+UNPACK). pack200 -repack DOES NOT WORK! You must EXPLICITY // use the programmatic safePack200 and safeUnpack200 so the jar will be consistent between pack/unpack cycles. if (repack.canDo(PackAction.LoadLibray)) { ByteArrayOutputStream baos = new ByteArrayOutputStream(8192); Sys.copyStream(inputStream, baos); // we make it NOT pack, and since we ARE NOT modifying the input stream, it's safe to read it directly byte[] unpackBuffer = baos.toByteArray(); int unpackLength = unpackBuffer.length; SHA512Digest digest = new SHA512Digest(); // now run the hash on it! byte[] hashBytes = new byte[digest.getDigestSize()]; digest.update(unpackBuffer, 0, unpackLength); digest.doFinal(hashBytes, 0); task.extraData = hashBytes; // since we can only read the input stream once, make sure to make it again. inputStream = new ByteArrayInputStream(unpackBuffer); } if (repack.canDo(PackAction.Lzma)) { ByteArrayOutputStream packedOutputStream = new ByteArrayOutputStream(length); // will be size or smaller. LZMA.encode(length, inputStream, packedOutputStream); Sys.close(inputStream); // convert the output stream to an input stream inputStream = new ByteArrayInputStream(packedOutputStream.toByteArray()); length = inputStream.available(); } // we cannot do BOTH encrypt + LGPL. They are mutually exclusive. // LGPL will also not be hashed in the signature generation if (repack.canDo(PackAction.Encrypt) && !repack.canDo(PackAction.LGPL)) { if (task.encryption != null) { ByteArrayOutputStream encryptedOutputStream = task.encryption.encrypt(inputStream, length); // convert the output stream to an input stream inputStream = new ByteArrayInputStream(encryptedOutputStream.toByteArray()); length = inputStream.available(); } else { throw new RuntimeException("** Unable to encrypt data when AES information is null!!"); } } task.inputStream = inputStream; }
From source file:org.cryptoworkshop.ximix.client.verify.LinkIndexVerifier.java
License:Apache License
public void verify(int stepNo, boolean isWithPairing, InputStream transcript) throws TranscriptVerificationException { CMSSignedDataParser cmsParser;//from w w w .j ava2 s. c om SignerId currentSID; Set<Integer> pmIndexes = new HashSet<>(); Set<Integer> cmIndexes = new HashSet<>(); try { cmsParser = new CMSSignedDataParser(new JcaDigestCalculatorProviderBuilder().setProvider("BC").build(), transcript); ASN1InputStream aIn = new ASN1InputStream(cmsParser.getSignedContent().getContentStream()); Object obj; while ((obj = aIn.readObject()) != null) { PostedData pM = PostedData.getInstance(obj); MessageCommitment cm = MessageCommitment.getInstance(pM.getData()); pmIndexes.add(pM.getIndex()); cmIndexes.add(cm.getNewIndex()); } currentSID = ((SignerInformation) cmsParser.getSignerInfos().getSigners().iterator().next()).getSID(); } catch (Exception e) { throw new TranscriptVerificationException("Cannot parse CMS wrapper on transcript: " + e.getMessage(), e); } SHA512Digest seedDigest = new SHA512Digest(); byte[] stepSeed = new byte[seedDigest.getDigestSize()]; // we follow the formulation in "Randomized Partial Checking Revisited" where the seed is // modified by the step number, the one difference being that in our case this will only take // place at the start of a pairing, or on an individual step. seedDigest.update(this.challengeSeed, 0, this.challengeSeed.length); seedDigest.update((byte) (stepNo >>> 24)); seedDigest.update((byte) (stepNo >>> 16)); seedDigest.update((byte) (stepNo >>> 8)); seedDigest.update((byte) stepNo); seedDigest.doFinal(stepSeed, 0); IndexNumberGenerator challenger; if (boardSize != 1) { challenger = new SeededChallenger(boardSize, stepNo, stepSeed); } else { challenger = new SerialChallenger(boardSize, stepNo, stepSeed); } Set<Integer> indexes = new HashSet<>(); while (challenger.hasNext()) { indexes.add(challenger.nextIndex()); } if (boardSize != 1 && isWithPairing) { if (!currentSID.equals(lastSID)) { for (int i = 0; i != boardSize; i++) { nextIndexes.add(i); } } else { indexes = new HashSet<>(nextIndexes); } } lastSID = currentSID; if (indexes.size() != pmIndexes.size()) { throw new TranscriptVerificationException( "Entries in witness table do not correspond to seeding - step " + stepNo + " size( " + indexes.size() + ", " + pmIndexes.size() + ")"); } indexes.removeAll(pmIndexes); nextIndexes.removeAll(cmIndexes); if (!indexes.isEmpty()) { throw new TranscriptVerificationException( "Entries in witness table do not correspond to seeding - step " + stepNo + " unaccounted " + indexes.size()); } }
From source file:org.cryptoworkshop.ximix.node.mixnet.service.BoardHostingService.java
License:Apache License
private FutureTask<MessageReply> submitToHandle(Message message) { if (message instanceof CommandMessage) { switch (((CommandMessage) message).getType()) { case GENERATE_SEED: final SeedMessage seedMessage = SeedMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(seedMessage.getBoardName(), new Callable<MessageReply>() { @Override// w ww . j av a 2 s . com public MessageReply call() throws Exception { String seedKey = seedMessage.getBoardName() + "." + seedMessage.getOperationNumber(); if (seedsAndWitnesses.containsKey(seedKey)) { return new MessageReply(MessageReply.Type.ERROR, new ErrorMessage("Duplicate seed generation request for operation " + seedMessage.getOperationNumber())); } // TODO: specify source of randomness SecureRandom random = new SecureRandom(); byte[] seed = new byte[64]; // largest we can manage with SHA-512 random.nextBytes(seed); GeneralHashCommitter sha512Committer = new GeneralHashCommitter(new SHA512Digest(), random); Commitment commitment = sha512Committer.commit(seed); seedsAndWitnesses.put(seedKey, new byte[][] { seed, commitment.getSecret() }); SeedCommitmentMessage seedCommitmentMessage = new SeedCommitmentMessage( seedMessage.getBoardName(), seedMessage.getOperationNumber(), commitment.getCommitment()); CMSSignedDataGenerator cmsGen = new CMSSignedDataGenerator(); KeyStore nodeCAStore = nodeContext.getNodeCAStore(); Certificate[] nodeCerts = nodeCAStore.getCertificateChain("nodeCA"); cmsGen.addSignerInfoGenerator(new JcaSimpleSignerInfoGeneratorBuilder().setProvider("BC") .build("SHA256withECDSA", (PrivateKey) nodeCAStore.getKey("nodeCA", new char[0]), (X509Certificate) nodeCerts[0])); for (Certificate cert : nodeCerts) { cmsGen.addCertificate(new JcaX509CertificateHolder((X509Certificate) cert)); } return new MessageReply(MessageReply.Type.OKAY, cmsGen .generate(new CMSProcessableByteArray(seedCommitmentMessage.getEncoded()), true) .toASN1Structure()); } }); case FETCH_SEED: final SeedMessage seedFetchMessage = SeedMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(seedFetchMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { String seedKey = seedFetchMessage.getBoardName() + "." + seedFetchMessage.getOperationNumber(); byte[][] seedAndWitness = seedsAndWitnesses.get(seedKey); if (seedAndWitness == null) { return new MessageReply(MessageReply.Type.ERROR, new ErrorMessage("Unknown seed requested for key: " + seedKey)); } return new MessageReply(MessageReply.Type.OKAY, new SeedAndWitnessMessage(seedAndWitness[0], seedAndWitness[1])); } }); case GET_BOARD_DETAILS: Callable<MessageReply> replyCallable = new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { String[] boardNames = boardRegistry.getBoardNames(); BoardDetailMessage[] details = new BoardDetailMessage[boardNames.length]; int count = 0; for (String boardName : boardNames) { BulletinBoard board = boardRegistry.getBoard(boardName); details[count++] = new BoardDetailMessage(boardName, nodeContext.getName(), board.size(), board.getBackupHost()); } return new MessageReply(MessageReply.Type.OKAY, new DERSequence(details)); } }; FutureTask<MessageReply> task = new FutureTask<>(replyCallable); boardExecutor.execute(task); return task; case GET_BOARD_HOST: final BoardMessage boardMessage = BoardMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(boardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { String boardHost = nodeContext.getBoardHost(boardMessage.getBoardName()); if (boardHost != null) { return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(boardHost)); } else { return new MessageReply(MessageReply.Type.OKAY, DERNull.INSTANCE); } } }); case ACTIVATE_BOARD: final BoardMessage activateBoardMessage = BoardMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(activateBoardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { boardRegistry.activateBoard(activateBoardMessage.getBoardName()); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case SUSPEND_BOARD: final BoardMessage suspendBoardMessage = BoardMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(suspendBoardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { if (boardRegistry.isSuspended(suspendBoardMessage.getBoardName())) { return new MessageReply(MessageReply.Type.ERROR, new BoardErrorStatusMessage( suspendBoardMessage.getBoardName(), BoardErrorStatusMessage.Status.SUSPENDED)); } boardRegistry.suspendBoard(suspendBoardMessage.getBoardName()); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case BOARD_CREATE: final CreateBoardMessage createBoardMessage = CreateBoardMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(createBoardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { if (boardRegistry.hasBoard(createBoardMessage.getBoardName())) { return new MessageReply(MessageReply.Type.ERROR, new BoardErrorStatusMessage(createBoardMessage.getBoardName(), BoardErrorStatusMessage.Status.ALREADY_EXISTS)); } if (createBoardMessage.getBackUpHost() != null) { boardRegistry.createBoard(createBoardMessage.getBoardName(), createBoardMessage.getBackUpHost()); } else { boardRegistry.createBoard(createBoardMessage.getBoardName()); } return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case BACKUP_BOARD_CREATE: final BoardMessage backupBoardCreateMessage = BoardMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(backupBoardCreateMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { boardRegistry.createBackupBoard(backupBoardCreateMessage.getBoardName()); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case BOARD_DOWNLOAD_LOCK: final BoardMessage downloadLockBoardMessage = BoardMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(downloadLockBoardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { if (boardRegistry.isLocked(downloadLockBoardMessage.getBoardName())) { return new MessageReply(MessageReply.Type.ERROR, new BoardErrorStatusMessage(downloadLockBoardMessage.getBoardName(), BoardErrorStatusMessage.Status.SUSPENDED)); } boardRegistry.downloadLock(downloadLockBoardMessage.getBoardName()); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case BOARD_DOWNLOAD_UNLOCK: final BoardMessage downloadUnlockBoardMessage = BoardMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(downloadUnlockBoardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { boardRegistry.downloadUnlock(downloadUnlockBoardMessage.getBoardName()); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case BOARD_SHUFFLE_LOCK: final BoardMessage shuffleLockBoardMessage = BoardMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(shuffleLockBoardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { if (boardRegistry.isLocked(shuffleLockBoardMessage.getBoardName())) { return new MessageReply(MessageReply.Type.ERROR, new BoardErrorStatusMessage(shuffleLockBoardMessage.getBoardName(), BoardErrorStatusMessage.Status.SUSPENDED)); } boardRegistry.shuffleLock(shuffleLockBoardMessage.getBoardName()); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case BOARD_SHUFFLE_UNLOCK: final BoardMessage shuffleUnlockBoardMessage = BoardMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(shuffleUnlockBoardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { boardRegistry.shuffleUnlock(shuffleUnlockBoardMessage.getBoardName()); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case FETCH_BOARD_STATUS: final TransitBoardMessage transitBoardMessage = TransitBoardMessage .getInstance(message.getPayload()); return boardExecutor.submitTask(transitBoardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { if (boardRegistry.isInTransit(transitBoardMessage.getOperationNumber(), transitBoardMessage.getBoardName(), transitBoardMessage.getStepNumber())) { return new MessageReply(MessageReply.Type.OKAY, new BoardStatusMessage( transitBoardMessage.getBoardName(), BoardStatusMessage.Status.IN_TRANSIT)); } if (boardRegistry.isComplete(transitBoardMessage.getOperationNumber(), transitBoardMessage.getBoardName(), transitBoardMessage.getStepNumber())) { return new MessageReply(MessageReply.Type.OKAY, new BoardStatusMessage( transitBoardMessage.getBoardName(), BoardStatusMessage.Status.COMPLETE)); } return new MessageReply(MessageReply.Type.OKAY, new BoardStatusMessage( transitBoardMessage.getBoardName(), BoardStatusMessage.Status.UNKNOWN)); } }); case FETCH_BOARD_COMPLETION_STATUS: final BoardMessage compStatusBoardMessage = BoardMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(compStatusBoardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { if (boardRegistry.isLocked(compStatusBoardMessage.getBoardName())) { return new MessageReply(MessageReply.Type.OKAY, new BoardStatusMessage(compStatusBoardMessage.getBoardName(), BoardStatusMessage.Status.IN_TRANSIT)); } return new MessageReply(MessageReply.Type.OKAY, new BoardStatusMessage( compStatusBoardMessage.getBoardName(), BoardStatusMessage.Status.COMPLETE)); } }); case START_SHUFFLE_AND_MOVE_BOARD_TO_NODE: final CopyAndMoveMessage startPandMmessage = CopyAndMoveMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(startPandMmessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { if (!boardRegistry.isShuffleLocked(startPandMmessage.getBoardName())) { return new MessageReply(MessageReply.Type.ERROR, new BoardErrorStatusMessage(startPandMmessage.getBoardName(), BoardErrorStatusMessage.Status.NOT_SHUFFLE_LOCKED)); } nodeContext.execute(new CopyAndMoveTask(nodeContext, boardRegistry, getPeerConnection(startPandMmessage.getDestinationNode()), startPandMmessage)); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case SHUFFLE_AND_MOVE_BOARD_TO_NODE: final PermuteAndMoveMessage pAndmMessage = PermuteAndMoveMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(pAndmMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { nodeContext.execute(new TransformShuffleAndMoveTask(nodeContext, boardRegistry, getPeerConnection(pAndmMessage.getDestinationNode()), pAndmMessage)); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case RETURN_TO_BOARD: final TransitBoardMessage returnToBoardMessage = TransitBoardMessage .getInstance(message.getPayload()); return boardExecutor.submitTask(returnToBoardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { nodeContext .execute(new ReturnToBoardTask(nodeContext, boardRegistry, returnToBoardMessage)); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case INITIATE_INTRANSIT_BOARD: final TransitBoardMessage initiateTransitBoardMessage = TransitBoardMessage .getInstance(message.getPayload()); return boardExecutor.submitTask(initiateTransitBoardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { boardRegistry.markInTransit(initiateTransitBoardMessage.getOperationNumber(), initiateTransitBoardMessage.getBoardName(), initiateTransitBoardMessage.getStepNumber()); boardRegistry.getTransitBoard(initiateTransitBoardMessage.getOperationNumber(), initiateTransitBoardMessage.getBoardName(), initiateTransitBoardMessage.getStepNumber()).clear(); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case TRANSFER_TO_BOARD: final BoardUploadBlockMessage uploadMessage = BoardUploadBlockMessage .getInstance(message.getPayload()); return boardExecutor.submitTask(uploadMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { boardRegistry.markInTransit(uploadMessage.getOperationNumber(), uploadMessage.getBoardName(), uploadMessage.getStepNumber()); boardRegistry .getTransitBoard(uploadMessage.getOperationNumber(), uploadMessage.getBoardName(), uploadMessage.getStepNumber()) .postMessageBlock(uploadMessage.getMessageBlock()); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case UPLOAD_TO_BOARD: final BoardUploadBlockMessage uploadToBoardMessage = BoardUploadBlockMessage .getInstance(message.getPayload()); return boardExecutor.submitTask(uploadToBoardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() { boardRegistry.markInTransit(uploadToBoardMessage.getOperationNumber(), uploadToBoardMessage.getBoardName(), uploadToBoardMessage.getStepNumber()); boardRegistry.getBoard(uploadToBoardMessage.getBoardName()) .postMessageBlock(uploadToBoardMessage.getMessageBlock()); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case CLEAR_BACKUP_BOARD: final BoardMessage backupBoardMessage = BoardMessage.getInstance(message.getPayload()); return boardExecutor.submitBackupTask(backupBoardMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() { // TODO: maybe backup the current backup locally? boardRegistry.getBackupBoard(backupBoardMessage.getBoardName()).clear(); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case TRANSFER_TO_BACKUP_BOARD: final BoardUploadIndexedMessage uploadIndexedMessage = BoardUploadIndexedMessage .getInstance(message.getPayload()); return boardExecutor.submitBackupTask(uploadIndexedMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() { boardRegistry.getBackupBoard(uploadIndexedMessage.getBoardName()) .postMessages(uploadIndexedMessage.getData()); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case TRANSFER_TO_BOARD_ENDED: final TransitBoardMessage transferToBoardEndedMessage = TransitBoardMessage .getInstance(message.getPayload()); return boardExecutor.submitTask(transferToBoardEndedMessage.getBoardName(), new Callable<MessageReply>() { public MessageReply call() { boardRegistry.markCompleted(transferToBoardEndedMessage.getOperationNumber(), transferToBoardEndedMessage.getBoardName(), transferToBoardEndedMessage.getStepNumber()); return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); case DOWNLOAD_BOARD_CONTENTS: final BoardDownloadMessage downloadRequest = BoardDownloadMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(downloadRequest.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() { if (!boardRegistry.isDownloadLocked(downloadRequest.getBoardName())) { return new MessageReply(MessageReply.Type.ERROR, new BoardErrorStatusMessage(downloadRequest.getBoardName(), BoardErrorStatusMessage.Status.NOT_DOWNLOAD_LOCKED)); } BulletinBoard board = boardRegistry.getBoard(downloadRequest.getBoardName()); PostedMessageBlock messages = board.removeMessages( new PostedMessageBlock.Builder(downloadRequest.getMaxNumberOfMessages())); return new MessageReply(MessageReply.Type.OKAY, messages); } }); case DOWNLOAD_SHUFFLE_TRANSCRIPT: final TranscriptDownloadMessage transcriptDownloadMessage = TranscriptDownloadMessage .getInstance(message.getPayload()); final BulletinBoard transitBoard = boardRegistry.getTransitBoard( transcriptDownloadMessage.getOperationNumber(), transcriptDownloadMessage.getStepNo()); return boardExecutor.submitTask(transitBoard.getName(), new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { boolean isCopyBoard = isCopyBoard(transitBoard); String challengerKey = getChallengerKey(transcriptDownloadMessage, isCopyBoard || (transitBoard.size() == 1)); IndexNumberGenerator challenger = challengers.get(challengerKey); if (challenger == null) { if (transitBoard.size() == 1) { challenger = new SerialChallenger(1, transcriptDownloadMessage.getStepNo(), transcriptDownloadMessage.getSeed()); } else if (TranscriptType.GENERAL == transcriptDownloadMessage.getType()) { challenger = new SerialChallenger( transitBoard.transcriptSize(TranscriptType.GENERAL), transcriptDownloadMessage.getStepNo(), transcriptDownloadMessage.getSeed()); } else { SHA512Digest seedDigest = new SHA512Digest(); byte[] challengeSeed = new byte[seedDigest.getDigestSize()]; if (transcriptDownloadMessage.getSeed() != null) { byte[] originalSeed = transcriptDownloadMessage.getSeed(); nodeContext.getEventNotifier().notify(EventNotifier.Level.INFO, "Original seed: " + new String(Hex.encode(originalSeed))); // we follow the formulation in "Randomized Partial Checking Revisited" where the seed is // modified by the step number, the one difference being that in our case this will only take // place at the start of a pairing, or on an individual step. seedDigest.update(originalSeed, 0, originalSeed.length); int stepNo = transcriptDownloadMessage.getStepNo(); seedDigest.update((byte) (stepNo >>> 24)); seedDigest.update((byte) (stepNo >>> 16)); seedDigest.update((byte) (stepNo >>> 8)); seedDigest.update((byte) stepNo); seedDigest.doFinal(challengeSeed, 0); } nodeContext.getEventNotifier().notify(EventNotifier.Level.INFO, "Challenge seed: " + transcriptDownloadMessage.getStepNo() + " " + new String(Hex.encode(challengeSeed))); try { if (isCopyBoard) { challenger = new SerialChallenger( transitBoard.transcriptSize(transcriptDownloadMessage.getType()), transcriptDownloadMessage.getStepNo(), challengeSeed); } else if (transcriptDownloadMessage.isWithPairing()) { // TODO: maybe configure int chunkSize = 100; IndexNumberGenerator sourceGenerator = new SerialChallenger( transitBoard.size(), 0, null); int[] indexes = new int[transitBoard.size()]; int count = 0; while (sourceGenerator.hasNext()) { TranscriptBlock transcript = transitBoard.fetchTranscriptData( TranscriptType.WITNESSES, sourceGenerator, new TranscriptBlock.Builder(0, chunkSize)); for (Enumeration en = transcript.getDetails().getObjects(); en .hasMoreElements();) { PostedData msg = PostedData.getInstance(en.nextElement()); indexes[count++] = MessageCommitment.getInstance(msg.getData()) .getNewIndex(); } } challenger = new PairedChallenger(indexes, transcriptDownloadMessage.getStepNo(), (IndexNumberGenerator) witnessChallengerConstructor.newInstance( transitBoard.transcriptSize( transcriptDownloadMessage.getType()), transcriptDownloadMessage.getStepNo(), challengeSeed)); } else { challenger = (IndexNumberGenerator) witnessChallengerConstructor .newInstance( transitBoard.transcriptSize( transcriptDownloadMessage.getType()), transcriptDownloadMessage.getStepNo(), challengeSeed); } } catch (Exception e) { nodeContext.getEventNotifier().notify(EventNotifier.Level.ERROR, e); return new MessageReply(MessageReply.Type.ERROR, new ErrorMessage( "Unable to create challenger on " + nodeContext.getName())); } } challengers.put(challengerKey, challenger); } if (challenger instanceof PairedChallenger) { ((PairedChallenger) challenger).setStepNo(transcriptDownloadMessage.getStepNo()); } TranscriptBlock transcriptBlock = transitBoard.fetchTranscriptData( transcriptDownloadMessage.getType(), challenger, new TranscriptBlock.Builder(transcriptDownloadMessage.getStepNo(), transcriptDownloadMessage.getMaxNumberOfMessages())); String generatorKey = getTranscriptGeneratorKey(transcriptDownloadMessage); TranscriptGenerator transGen = transcriptGenerators.get(generatorKey); if (transGen == null) { transGen = new TranscriptGenerator(); transcriptGenerators.put(generatorKey, transGen); } if (transcriptBlock.size() != 0) { for (Enumeration en = transcriptBlock.getDetails().getObjects(); en .hasMoreElements();) { transGen.writeFragment(((ASN1Object) en.nextElement()).getEncoded()); } return new MessageReply(MessageReply.Type.OKAY, new TranscriptTransferMessage( transcriptBlock.getStepNo(), transGen.getFragment())); } if (transGen.hasData()) { transGen.finish(); return new MessageReply(MessageReply.Type.OKAY, new TranscriptTransferMessage( transcriptBlock.getStepNo(), transGen.getFragment())); } // end of data return new MessageReply(MessageReply.Type.OKAY, new TranscriptTransferMessage(transcriptBlock.getStepNo())); } }); case DOWNLOAD_SHUFFLE_TRANSCRIPT_STEPS: final TranscriptQueryMessage transcriptQueryMessage = TranscriptQueryMessage .getInstance(message.getPayload()); FutureTask<MessageReply> dstsTask = new FutureTask(new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { List<String> transitBoardNames = boardRegistry .getTransitBoardNames(transcriptQueryMessage.getOperationNumber()); int[] stepNos = new int[transitBoardNames.size()]; String boardName = ""; for (int i = 0; i != stepNos.length; i++) { String name = transitBoardNames.get(i); boardName = name.substring(name.indexOf('.') + 1, name.lastIndexOf('.')); stepNos[i] = Integer.parseInt(name.substring(name.lastIndexOf('.') + 1)); } return new MessageReply(MessageReply.Type.OKAY, new TranscriptQueryResponse(queryCounter.incrementAndGet(), boardName, stepNos)); } }); nodeContext.getExecutorService().submit(dstsTask); return dstsTask; default: FutureTask<MessageReply> eTask = new FutureTask(new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { return new MessageReply(MessageReply.Type.ERROR, new ErrorMessage("Unknown command")); } }); nodeContext.getExecutorService().submit(eTask); return eTask; } } else { switch (((ClientMessage) message).getType()) { case UPLOAD_TO_BOARD: final BoardUploadMessage uploadMessage = BoardUploadMessage.getInstance(message.getPayload()); return boardExecutor.submitTask(uploadMessage.getBoardName(), new Callable<MessageReply>() { @Override public MessageReply call() { if (boardRegistry.isLocked(uploadMessage.getBoardName())) { return new MessageReply(MessageReply.Type.ERROR, new BoardErrorStatusMessage( uploadMessage.getBoardName(), BoardErrorStatusMessage.Status.SUSPENDED)); } byte[][] messages = uploadMessage.getData(); if (messages.length == 1) { boardRegistry.getBoard(uploadMessage.getBoardName()).postMessage(messages[0]); } else { boardRegistry.getBoard(uploadMessage.getBoardName()).postMessages(messages); } return new MessageReply(MessageReply.Type.OKAY, new DERUTF8String(nodeContext.getName())); } }); default: FutureTask<MessageReply> eTask = new FutureTask(new Callable<MessageReply>() { @Override public MessageReply call() throws Exception { return new MessageReply(MessageReply.Type.ERROR, new DERUTF8String("Unknown command")); } }); nodeContext.getExecutorService().submit(eTask); return eTask; } } }
From source file:org.jcryptool.visual.hashing.views.HashingView.java
License:Open Source License
private String computeHash(String hashName, String inputText, Text hashText) { hash = hash.getName(hashName);// w w w .j a v a 2 s . com byte[] digest = null; switch (hash) { case MD2: MD2Digest md2 = new MD2Digest(); md2.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[md2.getDigestSize()]; md2.doFinal(digest, 0); break; case MD4: MD4Digest md4 = new MD4Digest(); md4.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[md4.getDigestSize()]; md4.doFinal(digest, 0); break; case MD5: MD5Digest md5 = new MD5Digest(); md5.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[md5.getDigestSize()]; md5.doFinal(digest, 0); break; case SHA1: SHA1Digest sha1 = new SHA1Digest(); sha1.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[sha1.getDigestSize()]; sha1.doFinal(digest, 0); break; case SHA256: SHA256Digest sha256 = new SHA256Digest(); sha256.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[sha256.getDigestSize()]; sha256.doFinal(digest, 0); break; case SHA512: SHA512Digest sha512 = new SHA512Digest(); sha512.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[sha512.getDigestSize()]; sha512.doFinal(digest, 0); break; case SHA3_224: SHA3.Digest224 sha3_224 = new SHA3.Digest224(); sha3_224.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[sha3_224.getDigestLength()]; digest = sha3_224.digest(); break; case SHA3_256: SHA3.Digest256 sha3_256 = new SHA3.Digest256(); sha3_256.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[sha3_256.getDigestLength()]; digest = sha3_256.digest(); break; case SHA3_384: SHA3.Digest384 sha3_384 = new SHA3.Digest384(); sha3_384.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[sha3_384.getDigestLength()]; digest = sha3_384.digest(); break; case SHA3_512: SHA3.Digest512 sha3_512 = new SHA3.Digest512(); sha3_512.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[sha3_512.getDigestLength()]; digest = sha3_512.digest(); break; case SKEIN_256: Skein.Digest_256_256 skein_256 = new Skein.Digest_256_256(); skein_256.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[skein_256.getDigestLength()]; digest = skein_256.digest(); break; case SKEIN_512: Skein.Digest_512_512 skein_512 = new Skein.Digest_512_512(); skein_512.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[skein_512.getDigestLength()]; digest = skein_512.digest(); break; case SKEIN_1024: Skein.Digest_1024_1024 skein_1024 = new Skein.Digest_1024_1024(); skein_1024.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[skein_1024.getDigestLength()]; digest = skein_1024.digest(); break; case RIPEMD160: RIPEMD160Digest ripemd160 = new RIPEMD160Digest(); ripemd160.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[ripemd160.getDigestSize()]; ripemd160.doFinal(digest, 0); break; case SM3: SM3Digest sm3 = new SM3Digest(); sm3.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[sm3.getDigestSize()]; sm3.doFinal(digest, 0); break; case TIGER: TigerDigest tiger = new TigerDigest(); tiger.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[tiger.getDigestSize()]; tiger.doFinal(digest, 0); break; case GOST3411: GOST3411Digest gost3411 = new GOST3411Digest(); gost3411.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[gost3411.getDigestSize()]; gost3411.doFinal(digest, 0); break; case WHIRLPOOL: WhirlpoolDigest whirlpool = new WhirlpoolDigest(); whirlpool.update(inputText.getBytes(), 0, inputText.getBytes().length); digest = new byte[whirlpool.getDigestSize()]; whirlpool.doFinal(digest, 0); break; default: break; } String hashHexValue = new String(Hex.encode(digest)); if (btnHexadezimal.getSelection()) { String hashValueOutput = hashHexValue.toUpperCase().replaceAll(".{2}", "$0 "); //$NON-NLS-1$ //$NON-NLS-2$ hashText.setText(hashValueOutput); } else if (btnDezimal.getSelection()) { String hashValue = hexToDecimal(hashHexValue); hashValue = hashValue.replaceAll(".{3}", "$0 "); //$NON-NLS-1$ //$NON-NLS-2$ hashText.setText(hashValue); } else if (btnBinary.getSelection()) { String hashValue = hexToBinary(hashHexValue); hashValue = hashValue.replaceAll(".{8}", "$0#"); //$NON-NLS-1$ //$NON-NLS-2$ hashText.setText(hashValue); } return hashHexValue; }
From source file:org.ourfilesystem.security.SecurityTools.java
License:Open Source License
public static byte[] digestPublicKey(PublicKeySet k) { SHA512Digest dig = new SHA512Digest(); DigestRSAPublicKey(dig, (RSAKeyParameters) k.getPublicEncryptionKey()); DigestRSAPublicKey(dig, (RSAKeyParameters) k.getPublicSigningKey()); byte sig[] = new byte[dig.getDigestSize()]; dig.doFinal(sig, 0); return sig;//w ww . ja v a 2s . com }
From source file:org.ourfilesystem.security.SecurityTools.java
License:Open Source License
public static BBytes digestFile(File f, long offset, long size) throws IOException { SHA512Digest d = new SHA512Digest(); digestFile(d, f, offset, size);/*from w ww .j a v a2 s. c o m*/ byte sig[] = new byte[d.getDigestSize()]; d.doFinal(sig, 0); return new BBytes(sig); }
From source file:org.ourfilesystem.security.SecurityTools.java
License:Open Source License
public static BBytes digestPeerLocation(Peer p) { SHA512Digest d = new SHA512Digest(); digestString(d, p.getIntroduction()); digestString(d, (String) p.getLocation()); digestString(d, (String) p.getNickname()); digestLong(d, p.getUpdateCount());/* w w w .java2 s .com*/ digestDate(d, p.getRDate()); byte id[] = p.getIdentity().getBytes(); d.update(id, 0, id.length); byte sig[] = new byte[d.getDigestSize()]; d.doFinal(sig, 0); return new BBytes(sig); }
From source file:org.ourfilesystem.security.SecurityTools.java
License:Open Source License
public static BBytes digestPost(Post p, BBytes peerid) { SHA512Digest d = new SHA512Digest(); digestBBytes(d, p.getFileReferenceDigest()); digestBBytes(d, p.getNetworkId());/*from w w w.java 2s. c om*/ digestLong(d, p.getPostNumber()); if (p.getMessage() != null && p.getMessage() instanceof PostMessage) { PostMessage pm = (PostMessage) p.getMessage(); digestPostMessage(d, pm); } else if (p.getMessage() != null && p.getMessage() instanceof PostTemplate) { PostTemplate pt = (PostTemplate) p.getMessage(); digestPostTemplate(d, pt); } else if (p.getMessage() == null) { d.update((byte) 0); } else { throw new RuntimeException("Unknown message type!"); } digestBoolean(d, p.isPosterHasFile()); digestBBytes(d, peerid); digestDate(d, p.getRDate()); byte sig[] = new byte[d.getDigestSize()]; d.doFinal(sig, 0); return new BBytes(sig); }