17d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root/*
27d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * Copyright 2013 The Android Open Source Project
37d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root *
47d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * Licensed under the Apache License, Version 2.0 (the "License");
57d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * you may not use this file except in compliance with the License.
67d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * You may obtain a copy of the License at
77d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root *
87d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root *      http://www.apache.org/licenses/LICENSE-2.0
97d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root *
107d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * Unless required by applicable law or agreed to in writing, software
117d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * distributed under the License is distributed on an "AS IS" BASIS,
127d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * See the License for the specific language governing permissions and
147d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * limitations under the License.
157d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root */
167d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root
177d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Rootpackage org.conscrypt;
187d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root
197d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Rootimport java.security.PublicKey;
207d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Rootimport java.util.Arrays;
217d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root
227d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root/**
237d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * A simple but useless key class that holds X.509 public key information when
247d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * the appropriate KeyFactory for the key algorithm is not available.
257d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root */
2629916ef38dc9cb4e4c6e3fdb87d4e921546d3ef4Nathan Mittlerfinal class X509PublicKey implements PublicKey {
277d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    private static final long serialVersionUID = -8610156854731664298L;
287d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root
297d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    private final String algorithm;
307d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root
317d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    private final byte[] encoded;
327d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root
3329916ef38dc9cb4e4c6e3fdb87d4e921546d3ef4Nathan Mittler    X509PublicKey(String algorithm, byte[] encoded) {
347d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        this.algorithm = algorithm;
357d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        this.encoded = encoded;
367d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    }
377d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root
387d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    @Override
397d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    public String getAlgorithm() {
407d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        return algorithm;
417d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    }
427d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root
437d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    @Override
447d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    public String getFormat() {
457d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        return "X.509";
467d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    }
477d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root
487d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    @Override
497d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    public byte[] getEncoded() {
507d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        return encoded;
517d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    }
527d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root
537d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    @Override
547d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    public String toString() {
557d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        return "X509PublicKey [algorithm=" + algorithm + ", encoded=" + Arrays.toString(encoded)
567d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root                + "]";
577d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    }
587d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root
597d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    @Override
607d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    public int hashCode() {
617d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        final int prime = 31;
627d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        int result = 1;
637d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        result = prime * result + ((algorithm == null) ? 0 : algorithm.hashCode());
647d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        result = prime * result + Arrays.hashCode(encoded);
657d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        return result;
667d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    }
677d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root
687d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    @Override
697d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    public boolean equals(Object obj) {
707d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        if (this == obj)
717d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root            return true;
727d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        if (obj == null)
737d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root            return false;
747d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        if (getClass() != obj.getClass())
757d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root            return false;
767d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        X509PublicKey other = (X509PublicKey) obj;
777d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        if (algorithm == null) {
787d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root            if (other.algorithm != null)
797d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root                return false;
807d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        } else if (!algorithm.equals(other.algorithm))
817d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root            return false;
827d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        if (!Arrays.equals(encoded, other.encoded))
837d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root            return false;
847d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root        return true;
857d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root    }
867d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root}
87