package org.jacorb.security.sas;

/*
 *        JacORB - a free Java ORB
 *
 *   Copyright (C) 2002-2004 Gerald Brose
 *
 *   This library is free software; you can redistribute it and/or
 *   modify it under the terms of the GNU Library General Public
 *   License as published by the Free Software Foundation; either
 *   version 2 of the License, or (at your option) any later version.
 *
 *   This library is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *   Library General Public License for more details.
 *
 *   You should have received a copy of the GNU Library General Public
 *   License along with this library; if not, write to the Free
 *   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

import java.security.Provider;

import org.ietf.jgss.GSSException;
import org.ietf.jgss.GSSName;
import org.ietf.jgss.Oid;

import sun.security.jgss.spi.GSSContextSpi;
import sun.security.jgss.spi.GSSCredentialSpi;
import sun.security.jgss.spi.GSSNameSpi;
import sun.security.jgss.spi.MechanismFactory;

/**
 * This is the GSS-API Sercurity Provider Interface (SPI) Facotry GSSUP GSSManager
 *
 * @author David Robison
 * @version $Id: GSSUPMechFactory.java,v 1.10 2004-05-07 13:08:29 david.robison Exp $
 */

public final class GSSUPMechFactory
    implements MechanismFactory
{

    protected static Provider myProvider;

    private Oid myMechOid;
    private Oid[] nameTypes = 
       new Oid[] {GSSName.NT_EXPORT_NAME};

    public GSSUPMechFactory ()
    {
        try
        {
            myMechOid = new Oid("2.23.130.1.1.1");
        }
        catch (GSSException e)
        {
            // logger.error("GSSUPMechanism: " + e);
        }
    }

    public Oid getMechanismOid()
    {
        return myMechOid;
    }

    public Provider getProvider()
    {
        return myProvider;
    }

    public Oid[] getNameTypes()
    {
        return nameTypes;
    }

    public GSSCredentialSpi getCredentialElement(GSSNameSpi name, int initLifetime, int acceptLifetime, int usage) throws GSSException
    {
        return new GSSUPCredentialSpi(myProvider, myMechOid, name, initLifetime, acceptLifetime, usage);
    }

    public GSSNameSpi getNameElement(String name, Oid nameTypeOid) throws GSSException
    {
        return getNameElement(name.getBytes(), nameTypeOid);
    }

    public GSSNameSpi getNameElement(byte[] name ,Oid nameTypeOid) throws GSSException
    {
        return new GSSUPNameSpi(myProvider, myMechOid, name, nameTypeOid);
    }

    public GSSContextSpi getMechanismContext(GSSNameSpi nameSpi, GSSCredentialSpi credSpi, int lifetime) throws GSSException
    {
        return new GSSUPContextSpi(myProvider, myMechOid, nameSpi, credSpi, lifetime);
    }

    public GSSContextSpi getMechanismContext(GSSCredentialSpi credSpi) throws GSSException
    {
        return new GSSUPContextSpi(credSpi.getProvider(), credSpi.getMechanism(), credSpi.getName(), credSpi, credSpi.getInitLifetime());
    }

    public GSSContextSpi getMechanismContext(byte[] b1) throws GSSException
    {
        return null;
    }
}
