1 /* 2 * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 /* 26 * $Id: KeyInfo.java,v 1.7 2005/05/10 16:35:34 mullan Exp $ 27 */ 28 package javax.xml.crypto.dsig.keyinfo; 29 30 import java.util.List; 31 import javax.xml.crypto.MarshalException; 32 import javax.xml.crypto.XMLCryptoContext; 33 import javax.xml.crypto.XMLStructure; 34 35 /** 36 * A representation of the XML <code>KeyInfo</code> element as defined in 37 * the <a href="http://www.w3.org/TR/xmldsig-core/"> 38 * W3C Recommendation for XML-Signature Syntax and Processing</a>. 39 * A <code>KeyInfo</code> contains a list of {@link XMLStructure}s, each of 40 * which contain information that enables the recipient(s) to obtain the key 41 * needed to validate an XML signature. The XML Schema Definition is defined as: 42 * 43 * <pre> 44 * <element name="KeyInfo" type="ds:KeyInfoType"/> 45 * <complexType name="KeyInfoType" mixed="true"> 46 * <choice maxOccurs="unbounded"> 47 * <element ref="ds:KeyName"/> 48 * <element ref="ds:KeyValue"/> 49 * <element ref="ds:RetrievalMethod"/> 50 * <element ref="ds:X509Data"/> 51 * <element ref="ds:PGPData"/> 52 * <element ref="ds:SPKIData"/> 53 * <element ref="ds:MgmtData"/> 54 * <any processContents="lax" namespace="##other"/> 55 * <!-- (1,1) elements from (0,unbounded) namespaces --> 56 * </choice> 57 * <attribute name="Id" type="ID" use="optional"/> 58 * </complexType> 59 * </pre> 60 * 61 * A <code>KeyInfo</code> instance may be created by invoking one of the 62 * {@link KeyInfoFactory#newKeyInfo newKeyInfo} methods of the 63 * {@link KeyInfoFactory} class, and passing it a list of one or more 64 * <code>XMLStructure</code>s and an optional id parameter; 65 * for example: 66 * <pre> 67 * KeyInfoFactory factory = KeyInfoFactory.getInstance("DOM"); 68 * KeyInfo keyInfo = factory.newKeyInfo 69 * (Collections.singletonList(factory.newKeyName("Alice"), "keyinfo-1")); 70 * </pre> 71 * 72 * <p><code>KeyInfo</code> objects can also be marshalled to XML by invoking 73 * the {@link #marshal marshal} method. 74 * 75 * @author Sean Mullan 76 * @author JSR 105 Expert Group 77 * @since 1.6 78 * @see KeyInfoFactory#newKeyInfo(List) 79 * @see KeyInfoFactory#newKeyInfo(List, String) 80 */ 81 public interface KeyInfo extends XMLStructure { 82 83 /** 84 * Returns an {@link java.util.Collections#unmodifiableList unmodifiable 85 * list} containing the key information. Each entry of the list is 86 * an {@link XMLStructure}. 87 * 88 * <p>If there is a public subclass representing the type of 89 * <code>XMLStructure</code>, it is returned as an instance of that 90 * class (ex: an <code>X509Data</code> element would be returned as an 91 * instance of {@link javax.xml.crypto.dsig.keyinfo.X509Data}). 92 * 93 * @return an unmodifiable list of one or more <code>XMLStructure</code>s 94 * in this <code>KeyInfo</code>. Never returns <code>null</code> or an 95 * empty list. 96 */ 97 List getContent(); 98 99 /** 100 * Return the optional Id attribute of this <code>KeyInfo</code>, which 101 * may be useful for referencing this <code>KeyInfo</code> from other 102 * XML structures. 103 * 104 * @return the Id attribute of this <code>KeyInfo</code> (may be 105 * <code>null</code> if not specified) 106 */ 107 String getId(); 108 109 /** 110 * Marshals the key info to XML. 111 * 112 * @param parent a mechanism-specific structure containing the parent node 113 * that the marshalled key info will be appended to 114 * @param context the <code>XMLCryptoContext</code> containing additional 115 * context (may be null if not applicable) 116 * @throws ClassCastException if the type of <code>parent</code> or 117 * <code>context</code> is not compatible with this key info 118 * @throws MarshalException if the key info cannot be marshalled 119 * @throws NullPointerException if <code>parent</code> is <code>null</code> 120 */ 121 void marshal(XMLStructure parent, XMLCryptoContext context) 122 throws MarshalException; 123 }