1 /*
   2  * Copyright (c) 2001, 2006, 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 package com.sun.jmx.snmp.internal;
  26 
  27 import com.sun.jmx.snmp.SnmpTooBigException;
  28 import com.sun.jmx.snmp.SnmpStatusException;
  29 import com.sun.jmx.snmp.SnmpUnknownSecModelException;
  30 import com.sun.jmx.snmp.SnmpSecurityException;
  31 import com.sun.jmx.snmp.SnmpSecurityParameters;
  32 
  33 /**
  34  * Security sub system interface. To allow engine integration, a security sub system must implement this interface.
  35  * <p><b>This API is a Sun Microsystems internal API  and is subject
  36  * to change without notice.</b></p>
  37  */
  38 public interface SnmpSecuritySubSystem extends SnmpSubSystem {
  39      /**
  40      * Instantiates an <CODE>SnmpSecurityCache</CODE> that is dependant to the model implementation. This call is routed to the dedicated model according to the model ID.
  41      * @param id The model ID.
  42      * @return The model dependant security cache.
  43      */
  44     public SnmpSecurityCache createSecurityCache(int id) throws SnmpUnknownSecModelException;
  45     /**
  46      * To release the previously created cache. This call is routed to the dedicated model according to the model ID.
  47      * @param id The model ID.
  48      * @param cache The security cache to release.
  49      */
  50     public void releaseSecurityCache(int id,
  51                                      SnmpSecurityCache cache) throws SnmpUnknownSecModelException;
  52 
  53      /**
  54      * Called when a request is to be sent to the network. It must be securized. This call is routed to the dedicated model according to the model ID.
  55      * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
  56      * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model.
  57      * @param version The SNMP protocol version.
  58      * @param msgID The current request id.
  59      * @param msgMaxSize The message max size.
  60      * @param msgFlags The message flags (reportable, Auth and Priv).
  61      * @param msgSecurityModel This current security model.
  62      * @param params The security parameters that contain the model dependant parameters.
  63      * @param contextEngineID The context engine ID.
  64      * @param contextName The context name.
  65      * @param data The marshalled varbind list
  66      * @param dataLength The marshalled varbind list length.
  67      * @param outputBytes The buffer to fill with securized request. This is a representation independant marshalled format. This buffer will be sent to the network.
  68      * @return The marshalled byte number.
  69      */
  70     public int generateRequestMsg(SnmpSecurityCache cache,
  71                                   int version,
  72                                   int msgID,
  73                                   int msgMaxSize,
  74                                   byte msgFlags,
  75                                   int msgSecurityModel,
  76                                   SnmpSecurityParameters params,
  77                                   byte[] contextEngineID,
  78                                   byte[] contextName,
  79                                   byte[] data,
  80                                   int dataLength,
  81                                   byte[] outputBytes)
  82         throws SnmpTooBigException, SnmpStatusException, SnmpSecurityException, SnmpUnknownSecModelException;
  83 
  84     /**
  85      * Called when a response is to be sent to the network. It must be securized. This call is routed to the dedicated model according to the model ID.
  86      * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
  87      * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model.
  88      * @param version The SNMP protocol version.
  89      * @param msgID The current request id.
  90      * @param msgMaxSize The message max size.
  91      * @param msgFlags The message flags (reportable, Auth and Priv).
  92      * @param msgSecurityModel This current security model.
  93      * @param params The security parameters that contain the model dependant parameters.
  94      * @param contextEngineID The context engine ID.
  95      * @param contextName The context name.
  96      * @param data The marshalled varbind list
  97      * @param dataLength The marshalled varbind list length.
  98      * @param outputBytes The buffer to fill with securized request. This is a representation independant marshalled format. This buffer will be sent to the network.
  99      * @return The marshalled byte number.
 100      */
 101     public int generateResponseMsg(SnmpSecurityCache cache,
 102                                    int version,
 103                                    int msgID,
 104                                    int msgMaxSize,
 105                                    byte msgFlags,
 106                                    int msgSecurityModel,
 107                                    SnmpSecurityParameters params,
 108                                    byte[] contextEngineID,
 109                                    byte[] contextName,
 110                                    byte[] data,
 111                                    int dataLength,
 112                                    byte[] outputBytes)
 113         throws SnmpTooBigException, SnmpStatusException,
 114                SnmpSecurityException, SnmpUnknownSecModelException;
 115       /**
 116      * Called when a request is received from the network. It handles authentication and privacy. This call is routed to the dedicated model according to the model ID.
 117      * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
 118      * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model.
 119      * @param version The SNMP protocol version.
 120      * @param msgID The current request id.
 121      * @param msgMaxSize The message max size.
 122      * @param msgFlags The message flags (reportable, Auth and Priv)
 123      * @param msgSecurityModel This current security model.
 124      * @param params The security parameters in a marshalled format. The informations cointained in this array are model dependant.
 125      * @param contextEngineID The context engine ID or null if encrypted.
 126      * @param contextName The context name or null if encrypted.
 127      * @param data The marshalled varbind list or null if encrypted.
 128      * @param encryptedPdu The encrypted pdu or null if not encrypted.
 129      * @param decryptedPdu The decrypted pdu. If no decryption is to be done, the passed context engine ID, context name and data could be used to fill this object.
 130      * @return The decoded security parameters.
 131 
 132      */
 133     public SnmpSecurityParameters
 134         processIncomingRequest(SnmpSecurityCache cache,
 135                                int version,
 136                                int msgID,
 137                                int msgMaxSize,
 138                                byte msgFlags,
 139                                int msgSecurityModel,
 140                                byte[] params,
 141                                byte[] contextEngineID,
 142                                byte[] contextName,
 143                                byte[] data,
 144                                byte[] encryptedPdu,
 145                                SnmpDecryptedPdu decryptedPdu)
 146         throws SnmpStatusException, SnmpSecurityException, SnmpUnknownSecModelException;
 147           /**
 148      * Called when a response is received from the network. It handles authentication and privacy. This call is routed to the dedicated model according to the model ID.
 149      * <BR>The specified parameters are defined in RFC 2572 (see also the {@link com.sun.jmx.snmp.SnmpV3Message} class).
 150      * @param cache The cache that has been created by calling <CODE>createSecurityCache</CODE> on this model.
 151      * @param version The SNMP protocol version.
 152      * @param msgID The current request id.
 153      * @param msgMaxSize The message max size.
 154      * @param msgFlags The message flags (reportable, Auth and Priv).
 155      * @param msgSecurityModel This current security model.
 156      * @param params The security parameters in a marshalled format. The informations cointained in this array are model dependant.
 157      * @param contextEngineID The context engine ID or null if encrypted.
 158      * @param contextName The context name or null if encrypted.
 159      * @param data The marshalled varbind list or null if encrypted.
 160      * @param encryptedPdu The encrypted pdu or null if not encrypted.
 161      * @param decryptedPdu The decrypted pdu. If no decryption is to be done, the passed context engine ID, context name and data could be used to fill this object.
 162      * @return The security parameters.
 163 
 164      */
 165     public SnmpSecurityParameters processIncomingResponse(SnmpSecurityCache cache,
 166                                                           int version,
 167                                                           int msgID,
 168                                                           int msgMaxSize,
 169                                                           byte msgFlags,
 170                                                           int msgSecurityModel,
 171                                                           byte[] params,
 172                                                           byte[] contextEngineID,
 173                                                           byte[] contextName,
 174                                                           byte[] data,
 175                                                           byte[] encryptedPdu,
 176                                                           SnmpDecryptedPdu decryptedPdu)
 177         throws SnmpStatusException, SnmpSecurityException, SnmpUnknownSecModelException;
 178 }