Pin.java revision 6bc1e3966c4890ee3d47b5e527b800f2700ed627
16bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker/*
26bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * Copyright (C) 2015 The Android Open Source Project
36bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker *
46bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * Licensed under the Apache License, Version 2.0 (the "License");
56bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * you may not use this file except in compliance with the License.
66bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * You may obtain a copy of the License at
76bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker *
86bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker *      http://www.apache.org/licenses/LICENSE-2.0
96bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker *
106bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * Unless required by applicable law or agreed to in writing, software
116bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * distributed under the License is distributed on an "AS IS" BASIS,
126bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * See the License for the specific language governing permissions and
146bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker * limitations under the License.
156bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker */
166bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker
176bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubakerpackage android.security.net.config;
186bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker
196bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubakerimport java.util.Arrays;
206bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker
216bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker/** @hide */
226bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubakerpublic final class Pin {
236bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    public final String digestAlgorithm;
246bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    public final byte[] digest;
256bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker
266bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    private final int mHashCode;
276bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker
286bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    public Pin(String digestAlgorithm, byte[] digest) {
296bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        this.digestAlgorithm = digestAlgorithm;
306bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        this.digest = digest;
316bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        mHashCode = Arrays.hashCode(digest) ^ digestAlgorithm.hashCode();
326bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    }
336bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    @Override
346bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    public int hashCode() {
356bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        return mHashCode;
366bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    }
376bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker
386bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    @Override
396bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    public boolean equals(Object obj) {
406bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        if (this == obj) {
416bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker            return true;
426bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        }
436bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        if (!(obj instanceof Pin)) {
446bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker            return false;
456bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        }
466bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        Pin other = (Pin) obj;
476bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        if (other.hashCode() != mHashCode) {
486bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker            return false;
496bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        }
506bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        if (!Arrays.equals(digest, other.digest)) {
516bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker            return false;
526bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        }
536bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        if (!digestAlgorithm.equals(other.digestAlgorithm)) {
546bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker            return false;
556bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        }
566bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker        return true;
576bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker    }
586bc1e3966c4890ee3d47b5e527b800f2700ed627Chad Brubaker}
59