14718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root/*
24718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root * Copyright (C) 2012 The Android Open Source Project
34718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root *
44718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root * Licensed under the Apache License, Version 2.0 (the "License");
54718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root * you may not use this file except in compliance with the License.
64718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root * You may obtain a copy of the License at
74718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root *
84718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root *      http://www.apache.org/licenses/LICENSE-2.0
94718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root *
104718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root * Unless required by applicable law or agreed to in writing, software
114718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root * distributed under the License is distributed on an "AS IS" BASIS,
124718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root * See the License for the specific language governing permissions and
144718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root * limitations under the License.
154718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root */
164718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root
1738375a4d0b3d34e2babbd2f6a013976c7c439696Kenny Rootpackage org.conscrypt;
184718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root
194718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Rootimport java.io.Serializable;
204718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Rootimport java.security.SecureRandomSpi;
214718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root
224718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Rootpublic class OpenSSLRandom extends SecureRandomSpi implements Serializable {
234718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root    private static final long serialVersionUID = 8506210602917522860L;
244718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root
254718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root    @Override
264718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root    protected void engineSetSeed(byte[] seed) {
274718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root        NativeCrypto.RAND_seed(seed);
284718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root    }
294718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root
304718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root    @Override
314718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root    protected void engineNextBytes(byte[] bytes) {
324718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root        NativeCrypto.RAND_bytes(bytes);
334718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root    }
344718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root
354718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root    @Override
364718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root    protected byte[] engineGenerateSeed(int numBytes) {
374718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root        byte[] output = new byte[numBytes];
384718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root        NativeCrypto.RAND_bytes(output);
394718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root        return output;
404718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root    }
414718b07e482ccb083ce3dfff228d0615b96a8dd2Kenny Root}
42