14782c2cdea4fc7d070c9dac560380cc45852babcKenny Root/*
24782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * Copyright 2014 The Android Open Source Project
34782c2cdea4fc7d070c9dac560380cc45852babcKenny Root *
44782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * Licensed under the Apache License, Version 2.0 (the "License");
54782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * you may not use this file except in compliance with the License.
64782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * You may obtain a copy of the License at
74782c2cdea4fc7d070c9dac560380cc45852babcKenny Root *
84782c2cdea4fc7d070c9dac560380cc45852babcKenny Root *      http://www.apache.org/licenses/LICENSE-2.0
94782c2cdea4fc7d070c9dac560380cc45852babcKenny Root *
104782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * Unless required by applicable law or agreed to in writing, software
114782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * distributed under the License is distributed on an "AS IS" BASIS,
124782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * See the License for the specific language governing permissions and
144782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * limitations under the License.
154782c2cdea4fc7d070c9dac560380cc45852babcKenny Root */
164782c2cdea4fc7d070c9dac560380cc45852babcKenny Root
174782c2cdea4fc7d070c9dac560380cc45852babcKenny Rootpackage java.security.cert;
184782c2cdea4fc7d070c9dac560380cc45852babcKenny Root
194782c2cdea4fc7d070c9dac560380cc45852babcKenny Rootimport java.io.IOException;
204782c2cdea4fc7d070c9dac560380cc45852babcKenny Rootimport java.io.OutputStream;
214782c2cdea4fc7d070c9dac560380cc45852babcKenny Root
224782c2cdea4fc7d070c9dac560380cc45852babcKenny Root/**
234782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * The Extension part of an X.509 certificate (as specified in <a
244782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * href="http://www.ietf.org/rfc/rfc3280.txt">RFC 3280 &mdash; Internet X.509
254782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * Public Key Infrastructure: Certificate and Certificate Revocation List (CRL)
264782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * Profile</p>):
274782c2cdea4fc7d070c9dac560380cc45852babcKenny Root *
284782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * <pre>
294782c2cdea4fc7d070c9dac560380cc45852babcKenny Root *  Extension  ::=  SEQUENCE  {
304782c2cdea4fc7d070c9dac560380cc45852babcKenny Root *       extnID      OBJECT IDENTIFIER,
314782c2cdea4fc7d070c9dac560380cc45852babcKenny Root *       critical    BOOLEAN DEFAULT FALSE,
324782c2cdea4fc7d070c9dac560380cc45852babcKenny Root *       extnValue   OCTET STRING
334782c2cdea4fc7d070c9dac560380cc45852babcKenny Root *  }
344782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * </pre>
354782c2cdea4fc7d070c9dac560380cc45852babcKenny Root *
364782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * @since 1.7
374782c2cdea4fc7d070c9dac560380cc45852babcKenny Root * @hide
384782c2cdea4fc7d070c9dac560380cc45852babcKenny Root */
394782c2cdea4fc7d070c9dac560380cc45852babcKenny Rootpublic interface Extension {
404782c2cdea4fc7d070c9dac560380cc45852babcKenny Root    /**
414782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     * Returns the OID (Object Identifier) for this extension encoded as a
424782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     * string (e.g., "2.5.29.15").
434782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     */
444782c2cdea4fc7d070c9dac560380cc45852babcKenny Root    String getId();
454782c2cdea4fc7d070c9dac560380cc45852babcKenny Root
464782c2cdea4fc7d070c9dac560380cc45852babcKenny Root    /**
474782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     * Returns {@code true} if this extension is critical. If this is true and
484782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     * an implementation does not understand this extension, it must reject it.
494782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     * See RFC 3280 section 4.2 for more information.
504782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     */
514782c2cdea4fc7d070c9dac560380cc45852babcKenny Root    boolean isCritical();
524782c2cdea4fc7d070c9dac560380cc45852babcKenny Root
534782c2cdea4fc7d070c9dac560380cc45852babcKenny Root    /**
544782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     * The DER-encoded value of this extension.
554782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     */
564782c2cdea4fc7d070c9dac560380cc45852babcKenny Root    byte[] getValue();
574782c2cdea4fc7d070c9dac560380cc45852babcKenny Root
584782c2cdea4fc7d070c9dac560380cc45852babcKenny Root    /**
594782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     * Writes the DER-encoded extension to {@code out}.
604782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     *
614782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     * @throws IOException when there is an encoding error or error writing to
624782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     *             {@code out}
634782c2cdea4fc7d070c9dac560380cc45852babcKenny Root     */
644782c2cdea4fc7d070c9dac560380cc45852babcKenny Root    void encode(OutputStream out) throws IOException;
654782c2cdea4fc7d070c9dac560380cc45852babcKenny Root}
66