dhkeyagreement.java
来自「一个非常好的ssh客户端实现」· Java 代码 · 共 103 行
JAVA
103 行
/****************************************************************************** * * Copyright (c) 1999-2003 AppGate Network Security AB. All Rights Reserved. * * This file contains Original Code and/or Modifications of Original Code as * defined in and that are subject to the MindTerm Public Source License, * Version 2.0, (the 'License'). You may not use this file except in compliance * with the License. * * You should have received a copy of the MindTerm Public Source License * along with this software; see the file LICENSE. If not, write to * AppGate Network Security AB, Otterhallegatan 2, SE-41118 Goteborg, SWEDEN * *****************************************************************************/package com.mindbright.security.publickey;import java.math.BigInteger;import com.mindbright.jca.security.SecureRandom;import com.mindbright.jca.security.Key;import com.mindbright.jca.security.NoSuchAlgorithmException;import com.mindbright.jca.security.InvalidKeyException;import com.mindbright.jca.security.InvalidAlgorithmParameterException;import com.mindbright.jca.security.spec.AlgorithmParameterSpec;import com.mindbright.jce.crypto.KeyAgreementSpi;import com.mindbright.jce.crypto.SecretKey;import com.mindbright.jce.crypto.ShortBufferException;public final class DHKeyAgreement extends KeyAgreementSpi { private DHPrivateKey prvKey; private SecureRandom random; private BigInteger lastKey; private boolean lastPhase; protected void engineInit(Key key, SecureRandom random) throws InvalidKeyException { if(!(key instanceof DHPrivateKey)) { throw new InvalidKeyException("DHKeyAgreement got: " + key); } this.prvKey = (DHPrivateKey)key; this.random = random; } protected void engineInit(Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException { throw new InvalidAlgorithmParameterException( "DHKeyAgreement params not supported: " + params); } protected Key engineDoPhase(Key key, boolean lastPhase) throws InvalidKeyException, IllegalStateException { if(!(key instanceof DHPublicKey)) { throw new InvalidKeyException("Invalid key: " + key); } this.lastPhase = lastPhase; BigInteger y = ((DHPublicKey)key).getY(); lastKey = DiffieHellman.computeKey(prvKey.getX(), y, prvKey.getP()); return new DHPublicKey(lastKey, prvKey.getP(), prvKey.getG()); } protected byte[] engineGenerateSecret() throws IllegalStateException { if(!lastPhase) { throw new IllegalStateException("DHKeyAgreement not final"); } byte[] sharedSecret = lastKey.toByteArray(); lastPhase = false; lastKey = null; return sharedSecret; } protected int engineGenerateSecret(byte[] sharedSecret, int offset) throws IllegalStateException, ShortBufferException { byte[] genSecret = engineGenerateSecret(); if(genSecret.length > (sharedSecret.length - offset)) { throw new ShortBufferException("DHKeyAgreement, buffer too small"); } System.arraycopy(genSecret, 0, sharedSecret, offset, genSecret.length); return genSecret.length; } protected SecretKey engineGenerateSecret(String algorithm) throws IllegalStateException, NoSuchAlgorithmException, InvalidKeyException { throw new Error("DHKeyAgreement.engineGenerateSecret(String) not " + "implemented"); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?