fileOutputStream.write(signature.getData()); fileOutputStream.write(versionHeader); fileInputStream = new FileInputStream(inputFile);
buf.append(" RelayTag: ").append(_sentRelayTag); buf.append(" SignedOn: ").append(_sentSignedOnTime); buf.append(" signature: ").append(Base64.encode(_sentSignature.getData())); _log.debug(buf.toString());
buf.append(" RelayTag: ").append(_receivedRelayTag); buf.append(" SignedOn: ").append(_receivedSignedOnTime); buf.append(" signature: ").append(Base64.encode(_receivedSignature.getData())); if (valid) _log.debug(buf.toString());
/** * decrypt the signature (and subsequent pad bytes) with the * additional layer of encryption using the negotiated key along side * the packet's IV * * Caller must synch on this. * Only call this once! Decrypts in-place. */ private void decryptSignature() { if (_receivedEncryptedSignature == null) throw new NullPointerException("encrypted signature is null! this=" + this.toString()); if (_sessionKey == null) throw new NullPointerException("SessionKey is null!"); if (_receivedIV == null) throw new NullPointerException("IV is null!"); _context.aes().decrypt(_receivedEncryptedSignature, 0, _receivedEncryptedSignature, 0, _sessionKey, _receivedIV, _receivedEncryptedSignature.length); // handle variable signature size SigType type = _remotePeer.getSigningPublicKey().getType(); // if type == null throws NPE int sigLen = type.getSigLen(); int mod = sigLen % 16; if (mod != 0) { byte signatureBytes[] = new byte[sigLen]; System.arraycopy(_receivedEncryptedSignature, 0, signatureBytes, 0, sigLen); _receivedSignature = new Signature(type, signatureBytes); } else { _receivedSignature = new Signature(type, _receivedEncryptedSignature); } if (_log.shouldLog(Log.DEBUG)) _log.debug("Decrypted received signature: " + Base64.encode(_receivedSignature.getData())); }
if (sign == null) return null; byte[] sig = sign.getData(); System.arraycopy(sig, 0, payload, 0, Signature.SIGNATURE_BYTES);
byte[] sigbytes = signature.getData(); byte rbytes[] = new byte[20]; byte sbytes[] = new byte[20];
System.arraycopy(sig.getData(), 0, data, off, siglen); off += siglen; buf.append(" RelayTag: ").append(state.getSentRelayTag()); buf.append(" SignedOn: ").append(state.getSentSignedOnTime()); buf.append(" signature: ").append(Base64.encode(sig.getData())); buf.append("\nRawCreated: ").append(Base64.encode(data, 0, off)); buf.append("\nsignedTime: ").append(Base64.encode(data, off - padding - siglen - 4, 4));
padding = 0; byte preSig[] = new byte[siglen + padding]; System.arraycopy(sig.getData(), 0, preSig, 0, siglen); if (padding > 0) _context.random().nextBytes(preSig, siglen, padding);
/** * Verify the signature of this datagram (previously loaded with the * loadI2PDatagram() method) * @throws I2PInvalidDatagramException if the signature is invalid */ public void verifySignature() throws I2PInvalidDatagramException { // first check if it already got validated if(this.valid) return; if (rxSign == null || rxSign.getData() == null || rxDest == null) throw new I2PInvalidDatagramException("Datagram not yet read"); // now validate SigningPublicKey spk = rxDest.getSigningPublicKey(); SigType type = spk.getType(); if (type == null) throw new I2PInvalidDatagramException("unsupported sig type"); if (type == SigType.DSA_SHA1) { if (!this.dsaEng.verifySignature(rxSign, rxHash, spk)) throw new I2PInvalidDatagramException("Incorrect I2P repliable datagram signature"); } else { if (!this.dsaEng.verifySignature(rxSign, rxPayload, 0, rxPayloadLen, spk)) throw new I2PInvalidDatagramException("Incorrect I2P repliable datagram signature"); } // set validated this.valid = true; } }
+ (isFlagSet(FLAG_FROM_INCLUDED) ? _optionFrom.size() : 0) + (isFlagSet(FLAG_MAX_PACKET_SIZE_INCLUDED) ? 2 : 0); System.arraycopy(_optionSignature.getData(), 0, buffer, signatureOffset, _optionSignature.length()); return size;
System.arraycopy(sig.getData(), 0, data, off, siglen); off += siglen; } else {
if (padding > 0) _context.random().nextBytes(preEncrypt, 2 + ident.length + 4, padding); System.arraycopy(sig.getData(), 0, preEncrypt, 2+ident.length+4+padding, sig.length());
if (fakeSigLen == 0) { System.arraycopy(_optionSignature.getData(), 0, buffer, cur, _optionSignature.length()); cur += _optionSignature.length(); } else {
_optionSignature = new Signature(type, _optionSignature.getData());
+ (isFlagSet(FLAG_FROM_INCLUDED) ? _optionFrom.size() : 0) + (isFlagSet(FLAG_MAX_PACKET_SIZE_INCLUDED) ? 2 : 0); System.arraycopy(_optionSignature.getData(), 0, buffer, signatureOffset, _optionSignature.length()); return size;
if (fakeSigLen == 0) { System.arraycopy(_optionSignature.getData(), 0, buffer, cur, _optionSignature.length()); cur += _optionSignature.length(); } else {
_optionSignature = new Signature(type, _optionSignature.getData());