--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright © 2018 Inocybe Technologies and others. All rights reserved.
+
+This program and the accompanying materials are made available under the
+terms of the Eclipse Public License v1.0 which accompanies this distribution,
+and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.opendaylight.aaa</groupId>
+ <artifactId>aaa-parent</artifactId>
+ <version>0.8.0-SNAPSHOT</version>
+ <relativePath>../../parent</relativePath>
+ </parent>
+
+ <groupId>org.opendaylight.aaa</groupId>
+ <artifactId>aaa-password-service-api</artifactId>
+ <version>0.8.0-SNAPSHOT</version>
+ <name>ODL :: aaa :: ${project.artifactId}</name>
+ <packaging>bundle</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Export-Package>
+ org.opendaylight.aaa.api.password.service
+ </Export-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
--- /dev/null
+/*
+ * Copyright © 2018 Inocybe Technologies and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.aaa.api.password.service;
+
+/**
+ * Four-tuple representing a <code>PasswordHash</code>.
+ */
+public interface PasswordHash {
+
+ /**
+ * The algorithm name used to generate this hash.
+ *
+ * @return algorithm name used to generate this hash
+ */
+ String getAlgorithmName();
+
+ /**
+ * The salt used to generate this hash.
+ *
+ * @return salt used to generate this hash
+ */
+ String getSalt();
+
+ /**
+ * The number of iterations used to generate this hash.
+ *
+ * @return number of iterations used to generate this hash
+ */
+ int getIterations();
+
+ /**
+ * The hashed password.
+ *
+ * @return hashed password
+ */
+ String getHashedPassword();
+}
--- /dev/null
+/*
+ * Copyright © 2018 Inocybe Technologies and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.aaa.api.password.service;
+
+/**
+ * Service responsible for generating salts and comparing passwords. This service is designed for one-way hashing only.
+ */
+public interface PasswordHashService {
+
+ /**
+ * Extract a hashed password using a randomly generated salt.
+ *
+ * @param password a plaintext password
+ * @return the result of hashing the password
+ */
+ PasswordHash getHashedPassword(String password);
+
+ /**
+ * Extract a hashed password using an input salt.
+ *
+ * @param password a plaintext password
+ * @param salt the hash for <code>password</code>
+ * @return the result of hashing the password
+ */
+ PasswordHash getHashedPassword(String password, String salt);
+
+ /**
+ * Password comparison.
+ *
+ * @param plaintext the "input" password in plaintext
+ * @param stored the Base64-encoded stored password
+ * @param salt the salt used to originally encode <code>stored</code>
+ * @return whether or not the passwords match
+ */
+ boolean passwordsMatch(String plaintext, String stored, String salt);
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright © 2018 Inocybe Technologies and others. All rights reserved.
+This program and the accompanying materials are made available under the
+terms of the Eclipse Public License v1.0 which accompanies this distribution,
+and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.opendaylight.odlparent</groupId>
+ <artifactId>odlparent</artifactId>
+ <version>3.1.0</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>org.opendaylight.aaa</groupId>
+ <artifactId>aaa-password-service-aggregator</artifactId>
+ <version>0.8.0-SNAPSHOT</version>
+ <name>ODL :: aaa :: ${project.artifactId}</name>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>api</module>
+ <!--<module>impl</module>-->
+ </modules>
+
+</project>
<artifactId>servlet-jersey2</artifactId>
<version>${project.version}</version>
</dependency>
-
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>aaa-password-service-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>features-aaa</artifactId>
<module>aaa-cli</module>
<module>aaa-cli-jar</module>
<module>aaa-filterchain</module>
+ <module>aaa-password-service</module>
<module>artifacts</module>
<module>features</module>
<module>parent</module>